如下所示声明的简单列表视图垂直列出与其适配器关联的文本。
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/itemsListView">
</ListView>
我需要一个水平包裹的可变数量项目的视图,其项目在运行时决定(如下图所示)。我如何实现这一目标?
答案 0 :(得分:5)
使用Google全新的FlexboxLayout及其flexWrap:
答案 1 :(得分:3)
尝试
1. 为recyclerview添加弹性框依赖性
compile 'com.google.android:flexbox:0.3.0-alpha3'
2. 请按照与recyclerview
进行Flexbox集成的步骤进行操作https://github.com/google/flexbox-layout/blob/dev_recyclerview/RecyclerView.md
3. 使用以下方法为recyclerview设置弹性框属性:
FlexboxLayoutManager layoutManager = new FlexboxLayoutManager();
layoutManager.setFlexDirection(FlexDirection.COLUMN);
layoutManager.setJustifyContent(JustifyContent.FLEX_END);
Flexbox与RecyclerView集成的注意事项
新的FlexboxLayoutManager的代码尚未合并到主分支,因为它不像现有的FlexboxLayout那样稳定。但您仍然可以使用dev_recyclerview分支中的RecyclerView内的FlexboxLayoutManager引用一些示例代码
答案 2 :(得分:2)
您可以将RecycleView与StaggeredGridLayoutManager一起使用(int spanCount,int orientation)。
mRecycleView = (RecyclerView) findViewById(R.id.rv_tags);
mRecycleView.setLayoutManager(new StaggeredGridLayoutManager(2,1));
然后使用列表项setAdapter。
答案 3 :(得分:1)
据我所知,您的单元格可以表示为A 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包含的TextObject超出了所需的数量,则必须删除超出,否则必须根据需要添加任意数量的TextObject。 逻辑应如下:
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));
}
我希望它有所帮助。
答案 4 :(得分:1)
使用compile 'com.google.android:flexbox:0.3.0-alpha3'
。
recyclerView.setLayoutManager(new FlexboxLayoutManager());