GridLayoutManager 中的不同(动态)项目高度

Posted

技术标签:

【中文标题】GridLayoutManager 中的不同(动态)项目高度【英文标题】:Different (dynamic) items height in GridLayoutManager 【发布时间】:2016-04-30 22:39:27 【问题描述】:

我有一个包含 2 列的 RecyclerView 和 GridLayoutManager。 如何强制 LayoutManager 与第一个屏幕截图上的模板一致?现在我得到了第二张截图的结果。

需要结果:

当前结果:

【问题讨论】:

【参考方案1】:

GridLayoutManager 将使用网格,您可以设置一些跨度,但不能为不同的单元格设置不同的高度。

你想要的是StaggeredGridLayoutManager。如果它们适合,这只会将项目放在屏幕上,从而产生您需要的结果。如果需要,您还可以使用 setGapStrategy 更改重新排序行为。

【讨论】:

"但不同单元格的高度不同。"不过,您可以设置不同的行高;例如,每个单元格都有高度设置为 wrap_content 的图像视图,并且在每个单元格中设置了不同的图像,那么每一行将采用最大图像的高度 如何实现垂直交错网格布局项目的水平动态大小?或者换句话说,假设我在交错网格布局中有 2 列。我可以动态更改列宽吗?【参考方案2】:

这真的很容易。您必须将此管理器添加到 RecycleView:

recyclerView.setLayoutManager(new StaggeredGridLayoutManager(mColumnCount, 1));

就我而言,它看起来像这样:

Context context = view.getContext();
RecyclerView recyclerView = (RecyclerView) view;

if (mColumnCount <= 1) 
    recyclerView.setLayoutManager(new LinearLayoutManager(context));
 else 
    recyclerView.setLayoutManager(new StaggeredGridLayoutManager(mColumnCount, 1));

recyclerView.setAdapter(new MyItemRecyclerViewAdapter(DummyContent.ITEMS, mListener));

【讨论】:

以上是关于GridLayoutManager 中的不同(动态)项目高度的主要内容,如果未能解决你的问题,请参考以下文章

recyclerview gridlayoutmanager 怎么设置列数

GridLayoutManager 如何在下一行显示不同的视图类型

GridLayoutManager 未显示 Android 中的所有元素

recyclerview 中的 GridLayoutManager,元素之间有空间并匹配全宽

RecyclerView系列:GridLayoutManager的构造函数中的orientation理解

具有 2x1 排列的 Gridlayoutmanager