GridLayoutManager中的列数可变

sg_*_*dev 14 android android-gridlayout staggeredgridlayout android-recyclerview

我想在使用RecyclerView时在GridLayoutManager的行中显示可变数量的列.要显示的列数取决于列的TextView的大小.

我不知道列宽是否正在动态放入文本中.

有人可以帮忙吗?StaggeredGridLayoutManager没有解决我的目的,因为它自定义高度但是需要固定数量的列.

Bar*_*ski 30

看一下setSpanSizeLookup方法吧GridLayoutManager.它允许您指定特定位置的跨度大小RecyclerView.所以也许您可以使用它来满足您对变量列号的要求.

编辑:

GridLayoutManager manager = new GridLayoutManager(context, 2); // MAX NUMBER OF SPACES
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
        if (position == 1 || position == 6) {
            return 2; // ITEMS AT POSITION 1 AND 6 OCCUPY 2 SPACES
        } else {
            return 1; // OTHER ITEMS OCCUPY ONLY A SINGLE SPACE
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

使用这种布局时,managerRecyclerView应该看起来像这样:

+---+---+
| 0 |   |
+---+---+
|   1   |
+---+---+
| 2 | 3 |
+---+---+
| 4 | 5 |
+---+---+
|   6   |
+---+---+
Run Code Online (Sandbox Code Playgroud)

(只有带数字的方框表示你的项目RecyclerView,其他方框只是空格)


Cha*_*ton 5

如果要进行以下更改:4列,5列,6列...您可以在此数字(60)之间获得MMC(最小公共倍数)并设置GridLayoutManager:


    GridLayoutManager manager = new GridLayoutManager(context, 60); // set the grid with the MMC
    manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            return 12; // 60/12 = 5 Columns
        }
    });
Run Code Online (Sandbox Code Playgroud) 然后您可以在getSpanSize()的6、5和4列上返回10、12或15