RecyclerView - 水平,两行网格,第二行偏移

Posted

技术标签:

【中文标题】RecyclerView - 水平,两行网格,第二行偏移【英文标题】:RecyclerView - horizontal, two-row grid, second row offset 【发布时间】:2014-09-22 16:54:43 【问题描述】:

我正在尝试制作一个水平滚动的网格。它有两行。第二行是偏移量(一个项目宽度的一半,但计算起来很简单,在这里无关紧要)。

我目前正在使用来自https://github.com/antoniolg/RecyclerViewExtensions/tree/master/library/src/main/java/com/antonioleiva/recyclerviewextensions 的 RecyclerView 和 GridLayoutManager

然而,事实证明,抵消非常困难。

它最终应该看起来像

有人有什么建议让第二行像上图那样交错排列吗?

【问题讨论】:

【参考方案1】:

将StaggeredGridLayoutManager 与 ItemDecoration 一起使用,它将偏移量添加到适配器位置 0 处的项目。您将获得所需的输出。 (通过getItemOffsets)。 或者,当调用 onBind 时,您可以设置第一个项目的宽度,而不是 ItemDecoration,以使其包含左侧的间隙。

如果您的数据集发生更改,请不要调用 notifyDataSetChanged,这将重置 SGLM 中的历史计算。相反,请使用详细的通知事件,例如 notifyItemRangeInserted,以便 SGLM 能够在不重置位置的情况下重新计算布局。

【讨论】:

【参考方案2】:

我不知道您是否仍在处理此问题,但我的方法是使用适当的偏移量一次(顶部/底部)渲染项目 2,然后使用您的水平边距(设置它们为负数)以在第 2 项和第 3 项之间创建重叠等。

您必须将 OnTouchListeners 绑定到正在呈现的单个项目,而不是 RecyclerView 条目。

【讨论】:

以上是关于RecyclerView - 水平,两行网格,第二行偏移的主要内容,如果未能解决你的问题,请参考以下文章

java 自动为RecyclerView项添加相等的间距。可以处理水平,垂直和网格显示模式

如何让 Bootstrap 四列网格在第二列上跨两行?

Android RecyclerView

RecyclerView 网格布局

垂直 RecyclerView 内的水平 RecyclerView

Recyclerview 网格布局管理器显示不必要的空间