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

时间:2019-02-08 20:32:10

标签: android android-layout android-recyclerview

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

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

在下面查看我的屏幕截图

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

RecyclerView XML:

                    <android.support.v7.widget.RecyclerView
                    android:id="@+id/tagsRecyclerView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"                        
                    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)):

enter image description here

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

enter image description here

1 个答案:

答案 0 :(得分:1)

您应该考虑FlexboxLayout。查看GitHub项目站点上的自述文件。我认为您会发现它符合您的需求。 FlexboxLayoutManager还有一个RecyclerView。这一切都受Google支持。

您可以下载GitHub项目以进行使用,以查看是否可以使用它。 Google Play商店中还有一些演示游乐场应用程序。只需搜索即可。