垂直 GridLayoutManager 中的动态子宽度

dynamic child width in vertical GridLayoutManager

我有一个 table 要显示在 RecyclerView 中。目前我正在使用垂直方向的 GridLayoutManager。由于我的所有逻辑都取决于 GridLayoutManager 的垂直方向,因此我无法切换到水平方向或 StaggeredLayoutManager。有没有办法改变 RecyclerView children measure 以便每行的第一个单元格可以有不同的宽度?

我建议你使用SpanSizeLookup

像这样:

GridLayoutManager manager = new GridLayoutManager(context, 2);
 manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
        switch(adapter.getItemViewType(position)) {
            // first cell type
            case 1:
                return 1;
            default:
                return 2;
        }
    }
});

并且在您的适配器中,您应该覆盖 getItemViewType 和 return 不同类型的单元格。

经过一些资源挖掘,我发现方法 GridLayoutManager.calculateItemBorders() 负责项目宽度 (cachedBorder)。但是由于更改该方法是私有的,我们不能覆盖它。

希望这对面临类似情况的任何人有所帮助。