具有多个行和列的Recycler视图 - AutoFit,如Flow Layout [Android]

问题描述 投票:14回答:3

我正在构建一个像这样的布局的挑战:

enter image description here

我的第一个见解是使用带有适配器的RecyclerView,该适配器可以处理每个项目并使其布局膨胀。

到目前为止,还不是那么好。

到目前为止我有这个布局:

enter image description here

我可以感觉到我几乎就在那里,但是真的......我花了一周的时间考虑如何让它变得更好,或者就像UI提出的那样。

我的一些尝试是

  1. 使用网格布局并根据列表中的项目数更改最大列数
  2. StaggeredGridLayoutManager听起来像是一个强大的候选者来修复它并让我开心,但不幸的是,当我尝试使用它时,我意识到我们需要在构造函数上传递一些spanCount(列),我找到了一些方法来解决这个限制,改变了每行的列数,但我不喜欢最终结果,不像我在Foursquare等其他应用中看到的那样设置您的兴趣。
  3. 我检查了这个库Flow Layout,但我甚至没有开始使用它,因为我不想失去整个回收器的视图功能,我相信有一种方法可以使它工作! .....即使知道图书馆完全符合我的需要。

伙计们,我不是在这里寻找一些已经完成的代码安静或有人来完成我的工作。实际上我正在寻找隧道尽头的灯光。

android layout-manager android-recyclerview flowlayout gridlayoutmanager
3个回答
5
投票

您好,如果您不想使用recyclerview,还有另一个使用自定义库的示例,其行为类似于List qazxsw poi

使用以下代码,您可以预先设置所需的选择:

mFlowLayout.setAdapter(new TagAdapter<String>(mVals)
   {
       @Override
       public View getView(FlowLayout parent, int position, String s)
       {
           TextView tv = (TextView) mInflater.inflate(R.layout.tv,
                   mFlowLayout, false);
           tv.setText(s);
           return tv;
       }
   });

将显示如下结果: -

mAdapter.setSelectedList(1,3,5,7,8,9);


1
投票

使用包含名为Chips的组件的新Google材料设计库可以轻松完成此操作。因此您不必使用RecyclerView。

芯片代表小块中的复杂实体,例如联系人。它是一个圆形按钮,由标签,可选芯片图标和可选的关闭图标组成。如果可以检查芯片,可以点击或切换芯片。

如何使用组件:

1.导入库

enter image description here

2.使用以下代码

implementation 'com.google.android.material:material:1.1.0'

你可以在这里找到更多细节: <com.google.android.material.chip.ChipGroup android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- Your items here --> <com.google.android.material.chip.Chip android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Item 1"/> <com.google.android.material.chip.Chip android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Item 2"/> <com.google.android.material.chip.Chip android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Item 3"/> <!-- End --> </com.google.android.material.chip.ChipGroup>


0
投票

现在可能为时已晚,但您也可以使用谷歌的Material components

FlexBoxLayout

© www.soinside.com 2019 - 2024. All rights reserved.