RecyclerView GridLayoutManager:每个项目计数的单独布局
RecyclerView GridLayoutManager: Individual layout per item count
我的 GridLayoutManager 需要一些帮助。
如果我有一个项目,它应该正常显示在中间。
对于两个项目,它们应该并排放置。
Example with 2 Items
三到四个项目应该像正方形一样显示。
Example with 3 Items
Example with 4 Items
如果我是对的,这应该是 spanCount 2 的情况。但是对于 5 个项目(所以连续三个)是有问题的
从五个项目(及以上)开始,每个项目都应该连续 3 个
Example with 5 Items
如果底排的项目也在中间就特别好
我希望有人能帮助我并提前致谢
您可以像这样子类化 GridLayoutManager
来动态设置跨度:
class CustomGridLayoutManager(context: Context) : GridLayoutManager(context, 2) {
override fun onLayoutChildren(recycler: RecyclerView.Recycler?, state: RecyclerView.State?) {
updateSpanCount()
super.onLayoutChildren(recycler, state)
}
private fun updateSpanCount() {
val colCount = if (childCount <= 4) {
2
} else {
3
}
this.spanCount = colCount
}
}
如果你想让你的元素在最后一行居中,通过 GridLayoutManager
来做会有点复杂。为此,您可能需要检查 FlexboxLayout。这是一个由 Google 自己制作的库,具有在 HTML5 / CSS 世界中常见的 flex box 模型。
我的 GridLayoutManager 需要一些帮助。
如果我有一个项目,它应该正常显示在中间。
对于两个项目,它们应该并排放置。
Example with 2 Items
三到四个项目应该像正方形一样显示。
Example with 3 Items
Example with 4 Items
如果我是对的,这应该是 spanCount 2 的情况。但是对于 5 个项目(所以连续三个)是有问题的
从五个项目(及以上)开始,每个项目都应该连续 3 个
Example with 5 Items
如果底排的项目也在中间就特别好
我希望有人能帮助我并提前致谢
您可以像这样子类化 GridLayoutManager
来动态设置跨度:
class CustomGridLayoutManager(context: Context) : GridLayoutManager(context, 2) {
override fun onLayoutChildren(recycler: RecyclerView.Recycler?, state: RecyclerView.State?) {
updateSpanCount()
super.onLayoutChildren(recycler, state)
}
private fun updateSpanCount() {
val colCount = if (childCount <= 4) {
2
} else {
3
}
this.spanCount = colCount
}
}
如果你想让你的元素在最后一行居中,通过 GridLayoutManager
来做会有点复杂。为此,您可能需要检查 FlexboxLayout。这是一个由 Google 自己制作的库,具有在 HTML5 / CSS 世界中常见的 flex box 模型。