我有一个简单的线性布局,我在适配器中进行填充:
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.category_listview_row, parent, false);
} else {
((LinearLayout)convertView).removeAllViews();
}
if (LAYOUT_TYPES.GRID.equals(layoutType)) {
convertView = CategoryFragment.getViewForGridLayout(context, displayArray, position, convertView, listener);
} else {
convertView = CategoryFragment.getViewForListLayout(context, displayArray, position, convertView, listener);
}
return convertView;
}
在这里,category_listview_row
是以下内容:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:gravity="top"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
getViewForGridLayout
方法通过编程方式创建一个或多个视图,并将它们添加到 convertView
中。我希望所有子视图的高度都与父视图匹配,但是我无法实现这一点。这是通过编程方式添加的子视图的外部线性布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/base_listview_style_one_layout"
android:orientation="horizontal"
android:padding="@dimen/node_default_spacing"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:background="#5ab9c6">
这个布局有子视图,根据要显示的实际数据进行删除,所以有些子视图比其他的长。但是我希望它们都能与父视图一样高,这样看起来就不会奇怪。
这是我看到的屏幕截图:
- 第一行没问题,因为两个项目都有标题和副文本。 - 在第二行中,第二个项目没有副文本,所以该视图较小。然而,我希望它占据整个行的高度,这样单行中的所有项目都具有相同的高度。 任何提示?谢谢!
RecyclerView
与GridLayoutManager
),则可能会更容易,而不是尝试使用LinearLayout
来模拟。否则,我建议使用Android Studio的LayoutInspector来确定为什么您的规则没有按照您的预期工作。 - CommonsWareRecyclerView
和GridLayoutManager
,但是让一些行有2个项目,而其他行只有1个项目(并且填满整行)并不直观。我会重新阅读GridLayoutManager
文档。 - zundiSpanSizeLookup
附加到GridLayoutManager
上,在其中提供getSpanSize()
方法来指示给定位置要跨越的单元格数量。然后你就完成了。我的书的RecyclerView
章节中有关于此的介绍,并提供了一个名为 VideoTable 的示例应用程序来演示其使用方法。 - CommonsWare