【发布时间】:2017-01-09 22:37:39
【问题描述】:
我有一个简单的线性布局,我在适配器中充气:
@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">
此布局有子视图,这些子视图会根据要显示的实际数据被删除,因此有些会比其他的要长。但是我希望它们都是父级的高度,所以它看起来并不奇怪。
这是我看到的截图:
- 第一行没问题,因为两个项目都有标题和子文本
- 在第二行,第二个项目没有潜台词,因此视图更小。但是,我希望它占据行的全部高度,这样一行中的所有项目都将具有相同的高度。
有什么建议吗?谢谢!
【问题讨论】:
-
对我来说看起来像一些水平滚动条。不确定您的问题是什么,但我看到 LinearLayout 子视图的 android:layout_width 可能应该是 wrap_content。
-
“但是我不能让它工作”——你看到了什么?实际高度不正确的实际视图是什么?当你使用 Android Studio 的 Layout Inspector 来检查这些东西时,它会告诉你什么? “这是以编程方式添加的子视图的外部线性布局”——您的背景颜色是否具有正确的高度?
-
@CommonsWare 我添加了一个屏幕截图来更好地描述我所看到的。谢谢
-
如果您使用实际设置的东西来实现网格(例如,
RecyclerView和GridLayoutManager),而不是试图用LinearLayout伪造它,您可能会更轻松。否则,我只能建议使用 Android Studio 的 LayoutInspector 来尝试确定为什么您的规则没有按预期工作。 -
如果我没记错的话,我尝试使用
RecyclerView和GridLayoutManager但能够有一些行有 2 个项目,而其他行有 1 个项目(并且填满整行)是不直截了当。我会重新阅读GridLayoutManager文档。
标签: android android-layout android-linearlayout