能在两种方向上使用的错列网格布局管理器

3

我想实现的功能:

我想创建一个交错网格布局,它可以处理不同宽度高度的项目。布局会动态移动项目,以避免重叠。

我尝试过的方法:

我研究了使用默认的StaggeredGridLayoutManager,但它似乎只能在一个方向上工作(即垂直水平)。此外,我遇到的每个库或教程都只处理具有动态高度或动态宽度的项目,但没有同时处理两者的。

是否有一种方法可以使StaggeredGridLayoutManager动态跨越垂直和水平方向?或者我必须创建自己的自定义布局管理器?如果是后者,有谁能指点我学习如何创建这样的布局管理器的正确方向?


你好@Matthew,我也遇到了同样的问题,你解决了吗?如果是,请告诉我你是如何解决的? - Jeetu
1个回答

0

可以使用GridLayoutManager代替StaggeredGridLayoutManager,并结合使用spanSizeLookup。通过使用spanSizeLookup,我们可以指定列跨度。

mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
 item[position].columnSpan
}
}

在创建 GridLayoutManager 时,可以像这样指定最大列数。
layoutManager = GridLayoutManager(context, MAX_NUM_COL)

可以通过计算跨度因子和父元素高度来应用行跨度


谢谢回复!但是这样做只会操作宽度或高度(取决于LayoutManager的方向),我需要独立地操作两者 - Matthew Steinhardt
使用spanSizeLookup,只能操作columnSpan。为了应用row span,在recycler view adapter中使用parent计算高度,其中parent为(recycler view的总高度)和每个项目的当前行跨度信息。rowHeight = (recyclerView.height * rowSpan) / MAX_ROW - Varsha Ravikumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接