gridlayoutmanager(RecyclerView 的三种LayoutManager)

本文目录
- RecyclerView 的三种LayoutManager
- RecyclerView使用StaggeredGridLayoutManager布局管理器
- recyclerview gridlayoutmanager 怎么设置列数
- GridLayoutManager均分网格
RecyclerView 的三种LayoutManager
RecyclerView 推出了三种布局管理器:
1、LinearLayoutManager 线性布局管理器,呈现线性布局的RecyclerView,实现ListView效果。
2、GridLayoutManager 网格布局管理器,呈现网格布局的RecyclerView,实现GridView效果。
3、StaggeredGridLayoutManager 交错网格布局管理器,呈现交错网格布局的RecyclerView,StaggeredGridLayoutManager 是一种特殊的GridLayoutManager ,与GridLayoutManager 的区别在于,它允许每个Item的长度或高度不一致,实现瀑布流效果。(可以理解为:每个item的尺寸都一样的StaggeredGridLayoutManager == GridLayoutManager)。
***隐藏网址***
RecyclerView使用StaggeredGridLayoutManager布局管理器
一般做瀑布流用这个,就不说了,主要说一下下面这种布局
设置适配器adapter
主要是在adapter中为分组标题项设置宽度
recyclerview gridlayoutmanager 怎么设置列数
直接用addView(child, width, height).size()来设置就可以了。因为GridLayout里面的组件是在变化的,所有需要动态设置子组件的Size和它们之间的间距。还可以这么做:在父类容器中把子类容器的参数通过修改子类容器构造函数的方式传给子类容器,这样就可以在父类容器中直接修改子类容器的属性了。
GridLayoutManager均分网格
下面结论都是基于GridLayoutManager方向为竖直,spanCount为列数的情况,但在水平方向类似。
假设一个grid为5列,有一个item在第二行,宽度从第二列开始到最后一列。
那么那么这个item宽度占了4列,所以getSpanSize等于4。
在第二行,所以getSpanGroupIndex等于1。
宽度从第二列开始,所以getSpanIndex等于1。
在使用decoration做间距,getItemOffsets方法中使用Rect为每个item分配间距,如果每个item的左右间距之和不相等,则会导致最终每个item不是均分。
假设每个item之间的间隔为a,记每个item左间距为L0,L1,L2....Ln-1,右间距为R0,R1,R2....Rn-1,n为网格列表的列数。
常数k= ((n-1)*a)/n,每个item分配间距分配到的间距之和。
第一列: L0 = 0, R0= k
第二列:L1 =a-R0, R1 = k-L1
第三列:L2 = a-R1,R2=k-L2
......
第N个:L(n-1) = a - R(n-2), R(n-1) = k-L(n-1)
通过上面关系可以通过整理一个方法
其中

更多文章:
form表单制作(为什么制作的form表单会在网页显示中多出一行)
2026年10月11日 09:10
teammate(teammate,company,partner)
2026年10月11日 06:10
javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)
2026年10月11日 04:00
text函数公式(excel中round和text函数的区别是什么)
2026年10月11日 03:50
google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)
2026年10月11日 02:00
websocket整合springboot(Springboot整合Websocket遇到的坑)
2026年10月11日 01:40
drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)
2026年10月10日 19:20
xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)
2026年10月10日 17:50




