我为此找到了一个非常简单的解决方案。只需获取列表视图的适配器并在显示所有项目时计算其大小。优点是该解决方案也适用于 ScrollView。
例子:
public static void justifyListViewHeightBasedOnChildren (ListView listView) {
ListAdapter adapter = listView.getAdapter();
if (adapter == null) {
return;
}
ViewGroup vg = listView;
int totalHeight = 0;
for (int i = 0; i < adapter.getCount(); i++) {
View listItem = adapter.getView(i, null, vg);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams par = listView.getLayoutParams();
par.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
listView.setLayoutParams(par);
listView.requestLayout();
}
调用此函数传递您的 ListView 对象:
justifyListViewHeightBasedOnChildren(myListview);
上面显示的功能是对以下帖子的修改:
禁用列表视图中的滚动
请注意在将适配器设置为列表视图后调用此函数。如果适配器中条目的大小发生了变化,您也需要调用此函数。