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 模型。