StaggeredGridLayout,每行动态对象数,换行

Posted

技术标签:

【中文标题】StaggeredGridLayout,每行动态对象数,换行【英文标题】:StaggeredGridLayout with dynamic # of objects per row, line-wrapping 【发布时间】:2019-07-03 03:08:06 【问题描述】:

我正在寻找一种在启用换行的情况下在我的 UI 中显示可变宽度的图像/图标列表的方法,这样每行可以有可变数量的对象。对象列表是动态的并且来自数据库。我目前使用的是 StaggeredGridLayout,但限制如下:

    每行需要一致的跨度(列)数。我知道我可以通过编程方式进行设置,但我需要以某种方式测量每个对象,而我真的不想这样做,因为下面的 #2 等其他限制 即使使用变量 spanCount(列数),gridLayout 也会拉伸每一行以填充最大宽度,从而在每个对象之间创建难看的间距。

请看下面的截图

我在这里错过了什么大事吗?也许我应该完全使用不同的构造(如表格),但如果我遗漏了一些明显的东西,请告诉我。

RecyclerView XML:

                    <android.support.v7.widget.RecyclerView
                    android:id="@+id/tagsRecyclerView"
                    android:layout_
                    android:layout_                        
                    android:layout_marginTop="6dp"
                    android:layout_marginHorizontal="8dp"
                    android:rotationY="180"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintHorizontal_bias="1.0"
                    app:layout_constraintStart_toEndOf="@+id/tagsTxt"
                    app:layout_constraintTop_toBottomOf="@+id/paragraphTxt" />

布局初始化使用:

tagRecyclerLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);

当前外观(StaggeredGridLayout;网格拉伸以填充所有空间,列数一致 (spanCount)):

所需外观(换行、一致间距、动态列数):

【问题讨论】:

我不会为此使用网格布局。我将为每一行设置一个 LinearLayout,然后在添加文本之前进行测量。如果不合适,我会添加一个新行。 【参考方案1】:

您应该考虑FlexboxLayout。查看 GitHub 项目站点上的自述文件。我想你会发现它会满足你的需求。还有一个FlexboxLayoutManager 代表RecyclerView。这都是谷歌支持的。

你可以下载 GitHub 项目来玩玩,看看能不能用。 Google Play 商店中也有一些演示游乐场应用程序。只需搜索即可。

【讨论】:

以上是关于StaggeredGridLayout,每行动态对象数,换行的主要内容,如果未能解决你的问题,请参考以下文章

将图像从 firebase 检索到 StaggeredGridLayout Android

RecyclerView 中使用 StaggeredGridLayout 的全宽页脚或最后一项

交错网格布局行为问题

[CQOI2011]动态逆序对

bzoj3295: [Cqoi2011]动态逆序对

交错网格布局行为问题