垂直GridLayoutManager中的动态子级宽度

时间:2018-07-09 11:02:46

标签: android android-recyclerview gridlayoutmanager

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

enter image description here

2 个答案:

答案 0 :(得分:0)

我建议您使用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并为您的单元格返回不同的类型。

答案 1 :(得分:0)

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

希望这可以帮助面临类似情况的任何人。