在两个方向上工作的交错网格布局管理器
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 AWT 图形界面编程LayoutManager 布局管理器 ④ ( GridLayout 网格布局 | GridBagLayout 网格包布局 )
Java AWT 图形界面编程LayoutManager 布局管理器 ④ ( GridLayout 网格布局 | GridBagLayout 网格包布局 )