当前位置: 首页 > 知识库问答 >
问题:

RecyclerView GridLayoutManager:每个项目计数的单个布局

郭乐湛
2023-03-14

我需要一些关于我的GridLayoutManager的帮助。

如果我有一个项目,它应该在中间正常显示。
对于两个项目,它们应该彼此相邻。从三到四个项目的示例,它应该像正方形一样显示。3个项目的示例4个项目的示例

如果我是对的,spanCount 2应该就是这种情况。但是,如果有5个项目(所以连续3个),那就有问题了

从5个项目(及以上)开始,每个项目应该是连续3个,例如有5个项目,如果底部行的项目也在中间,那就特别好了



我希望有人能帮助我,并提前感谢

共有1个答案

鲁鹤轩
2023-03-14

您可以通过子类化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。这是一个由谷歌自己制作的库,具有HTML5/CSS世界中常见的flex-box模型。

 类似资料:
  • 问题内容: 通常,您需要显示数据库项目的列表以及有关每个项目的特定汇总号。例如,当您在“堆栈溢出”中键入标题文本时,将出现“相关问题”列表。该列表显示了相关条目的标题以及每个标题的响应数量的单个汇总数量。 我有一个类似的问题,但需要多个聚合。我想根据用户选项以3种格式中的任何一种显示项目列表: 我的商品的名称(共15个,我拥有的13个) 我的商品的名称(共15个) 我的商品的名称(我拥有13个)

  • 问题内容: 有什么方法可以计算数组中每个项目的出现? 可以说我有: 这里的输出将是: 如果我有: 输出为: 这里的输出只是为了展示预期的结果。 问题答案: 你可以使用来自Google Collections / Guava的或来自Apache Commons的。 如果你有一个集合而不是一个数组,则可以用于addAll()将整个内容添加到上述数据结构中,然后将该方法应用于每个值。一个或会给你以定义的

  • 我必须设计数据库,这样我就会有一个名为Item(待售)的表。当一个项目被创建时,它的一个部分是数量。所以我计划有一个表item_qtyitem_id和数量(店主拥有的原始数量)。 现在,客户可以在线查看此商品并下订单。所需的设计是,订单可以有许多项目,每个项目都有一个关联的数量(这是来自客户的数量,例如,我想买2支钢笔)。 我理想地想让订单类具有:

  • 问题内容: 我遇到了我认为应该是一个非常简单的问题。 我需要将arrayList中的每个项目与列表中的其他所有项目进行比较,而无需将项目与其自身进行比较。它不像调用equals()比较那样简单,它涉及一些自定义逻辑,我在下面的代码中省略了这些自定义逻辑。而且,ArrayList不应以任何方式更改。 我似乎遇到的问题是,一旦进入第二个循环,我就不知道是否有另一个对象要与之比较(因为它是一个可变大小的

  • 问题内容: 我正在使用一个伸缩框来显示8个项目,这些项目将随我的页面动态调整大小。如何强制将项目分成两行?(每行4个)? 这是一个相关的片段: 问题答案: 您已经在容器上了。很好,因为它会覆盖默认值source。这是在某些情况下项目无法包装形成网格的原因。 在这种情况下,主要问题在于伸缩项目。 该属性实际上并没有设置弹性项目的大小。它的任务是在容器源中分配可用空间。因此,无论屏幕尺寸有多小,每一项

  • 我正在使用一个flex框显示8个项目,这些项目将动态调整我的页面大小。如何强制它将项目拆分为两行?(每行4个)? 以下是相关片段: (或者如果您更喜欢jsfiddle-http://jsfidle.net/vivmaha/oq6prk1p/2/) null null