Bri*_*vdb 8 grid android html-table android-layout android-recyclerview
我希望创建以下布局(红色sqaures不一定是正方形,自定义固定高度也很好).布局似乎很简单,但我找不到适合我需要的布局管理器.

我尝试了StaggeredGridLayoutManager,但这只允许设置列或行的跨度,而不是两者.
在自定义布局管理器周围是否有浮动能够执行此操作?我看过TwoWayView但是改变高度似乎有问题而且库没有被维护.
有人遇到这个问题并解决了吗?
kri*_*yna 15
有点晚了,但它可能会帮助其他人......
我正在寻找同样的东西,最后,经过2天的谷歌搜索,我找到了解决方案.非常感谢Nick Butcher!他的布局管理员SpannableGridLayoutManager有能力做到这一点.在我的情况下,我正在做一个类似前两行的模式:
解决方案很简单:
1. 从这里下载SpannableGridLayoutManager
出于某种原因,我不得不改变这一行:
while (availableSpace > 0 && lastVisiblePosition < lastItemPosition) {
Run Code Online (Sandbox Code Playgroud)
至
while (lastVisiblePosition < lastItemPosition) {
Run Code Online (Sandbox Code Playgroud)
让经理工作.
2.将SpannableGridLayoutManger设置为RecyclerView
就我而言:
SpannedGridLayoutManager manager = new SpannedGridLayoutManager(
new SpannedGridLayoutManager.GridSpanLookup() {
@Override
public SpannedGridLayoutManager.SpanInfo getSpanInfo(int position) {
// Conditions for 2x2 items
if (position % 6 == 0 || position % 6 == 4) {
return new SpannedGridLayoutManager.SpanInfo(2, 2);
} else {
return new SpannedGridLayoutManager.SpanInfo(1, 1);
}
}
},
3, // number of columns
1f // how big is default item
);
Run Code Online (Sandbox Code Playgroud)
这给了我我想要的东西(数字是适配器中项目的位置):
编辑:带有样式的错误
将这些行放入attrs.xml
<declare-styleable name="SpannedGridLayoutManager">
<attr name="android:orientation" />
<attr name="spanCount" />
<attr name="aspectRatio" format="string" />
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)
终于做到了,它将帮助每个试图实现任何类型模式的人
我正在寻找相同的结果,但只有一个header和延迟加载footer。我也尝试了尼克·布彻图书馆的@Kristyna答案。但它有很多问题,例如快速滚动视图消失问题、额外空间问题或固定单元格高度问题。
我找到了 Arasthel SpannedGridLayoutManager的另一个库并尝试实现它。但它也存在许多问题,例如固定高度和页脚额外空间问题
最后,经过 5 小时的挖掘 Arasthel 的 SpannedGridLayoutManager 后,我修复了问题并找到了结果。
我最终编辑的分叉库从这里下载SpannedGridLayoutManager。
就我而言
val adapter = GridItemAdapter()//This is your adapter
val spannedGridLayoutManager = SpannedGridLayoutManager(orientation = VERTICAL, spans = 3)
spannedGridLayoutManager.itemOrderIsStable = true
recyclerview.layoutManager = spannedGridLayoutManager
Run Code Online (Sandbox Code Playgroud)
和
spannedGridLayoutManager.spanSizeLookup = SpannedGridLayoutManager.SpanSizeLookup { position ->
when {
position == 0 -> {
/**
* 150f is now static
* should calculate programmatically in runtime
* for to manage header hight for different resolution devices
*/
SpanSize(3, 1, 150f)
}
position % 7 == 1 ->
SpanSize(2, 2)
else ->
SpanSize(1, 1)
}
}
recyclerview.adapter = adapter
Run Code Online (Sandbox Code Playgroud)
这个spanSizeLookup逻辑可能会根据需求而变化,对我来说,我出于测试目的随机设置了它。
| 归档时间: |
|
| 查看次数: |
5875 次 |
| 最近记录: |