在两个方向上工作的交错网格布局管理器

Posted

技术标签:

【中文标题】在两个方向上工作的交错网格布局管理器【英文标题】:Staggered Grid Layout Manager that works in both orientations 【发布时间】:2019-11-18 12:36:38 【问题描述】:

我想做的事:

我正在尝试创建一个交错网格布局,该布局采用具有不同宽度高度的项目。布局动态地移动项目,因此它们不会重叠。

我尝试过的:

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

有没有办法让StaggeredGridLayoutManager 动态跨越垂直和水平?还是我必须创建自己的自定义布局管理器?如果是后者,有人能指出正确的方向来了解如何创建这样的布局管理器吗?

【问题讨论】:

你好@Matthew,我也面临同样的问题,你解决了吗?如果是,你能告诉我你是怎么做到的吗? 【参考方案1】:

GridLayoutManager可以与spanSizeLookup一起使用,而不是StaggeredGridLayoutManager。使用spanSizeLookup,我们可以指定列跨度。

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


在创建 GridLayoutManager 时,指定这样的最大列数

layoutManager = GridLayoutManager(context, MAX_NUM_COL)

可以通过使用父级的跨度因子和高度计算高度来应用行跨度

【讨论】:

感谢您的回复!但是,这不会只操纵宽度或高度(取决于 LayoutManager 的方向)吗?我需要独立操作 both 使用 spanSizeLookup,只能操作 columnSpan。为了应用行跨度,使用父作为(回收器视图的总高度)和每个项目的当前行跨度信息计算回收器视图适配器中的高度 rowHeight = (recyclerView.height * rowSpan)/MAX_ROW

以上是关于在两个方向上工作的交错网格布局管理器的主要内容,如果未能解决你的问题,请参考以下文章

网格组布局管理器(GridBagLayout)网格包布局管理器

先填充网格布局管理器列,然后填充行

python之tkinter使用-Grid(网格)布局管理器

JAVA 网格布局管理器

Java AWT 图形界面编程LayoutManager 布局管理器 ④ ( GridLayout 网格布局 | GridBagLayout 网格包布局 )

Java AWT 图形界面编程LayoutManager 布局管理器 ④ ( GridLayout 网格布局 | GridBagLayout 网格包布局 )