ListView与textViews水平包装dynamic填充

一个简单的列表视图声明如下,垂直列出与其适配器相关的文本。

<ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/itemsListView"> </ListView> 

我需要一个包含水平方向的可变项目数的视图,并且它的项目在运行时决定(如下图所示)。 我如何做到这一点?

水平包裹文本视图

Solutions Collecting From Web of "ListView与textViews水平包装dynamic填充"

使用Google全新的FlexboxLayout及其flexWrap:

https://github.com/google/flexbox-layout

尝试

1.为recyclerview添加柔性框依赖项

 compile 'com.google.android:flexbox:0.3.0-alpha3' 

2.请遵循flexbox与recyclerview集成的步骤

https://github.com/google/flexbox-layout/blob/dev_recyclerview/RecyclerView.md

3.使用以下命令为回收站查看Flex框属性:

 FlexboxLayoutManager layoutManager = new FlexboxLayoutManager(); layoutManager.setFlexDirection(FlexDirection.COLUMN); layoutManager.setJustifyContent(JustifyContent.FLEX_END); 

Flexbox与RecyclerView集成的注意事项

新FlexboxLayoutManager的代码尚未合并到主分支,因为它不像现有的FlexboxLayout那样稳定。 但是您仍然可以使用dev_recyclerview分支中的RecyclerView内的FlexboxLayoutManager引用一些示例代码

有关更多详细信息, 请访问https://github.com/google/flexbox-layout

你可以使用StaggeredGridLayoutManager的RecycleView(int spanCount,int orientation)。

 mRecycleView = (RecyclerView) findViewById(R.id.rv_tags); mRecycleView.setLayoutManager(new StaggeredGridLayoutManager(2,1)); 

然后setAdapter与您的列表项目。

据我所见,你的单元格可以表示为一个RelativeLayout,其中水平居中的LinearLayout。 所有的文本对象(TextView或更复杂的东西)被插入到LinearLayout中。

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/container" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:orientation="horizontal" /> </RelativeLayout> 

在您的适配器中,您必须绑定此布局中的内容。 如果LinearLayout包含的TextObjects比所需要的多,则必须删除超出部分,否则必须根据需要添加尽可能多的TextObjects。 逻辑应该是以下几点:

  int currentChildCount = holder.textContainer.getChildCount(); if(currentChildCount >item.getSubtasks().size()){ for (int i = 0; i < (holder.textContainer.getChildCount() - < TOTAL_TEXTS >; i++) { holder.textContainer.removeView(holder.textContainer.getChildAt(holder.text.getChildCount() - 1)); } } else { for (int i = 0; i < ( < TOTAL_TEXTS > -currentChildCount) ; i++){ holder.textContainer.addView(LayoutInflater.from(context).inflate(R.layout.item_list_text_child, null, false)); } } 

最后,你必须更新textObjects的内容:

 for (int i=0; i<holder.textContainer.getChildCount();i++){ ArrayList<String> textContents =<YOUR_TEXTS>; composeChildTaskView(context,textContents.get(i),holder.textContainer.getChildAt(i)); } 

我希望它有帮助。

使用compile 'com.google.android:flexbox:0.3.0-alpha3'

recyclerView.setLayoutManager(new FlexboxLayoutManager());

请参阅https://github.com/google/flexbox-layout

在这里输入图像说明