看到标题,很多人会奇怪这是一种什么设计,ListView 不是就可以滑动了嘛,为什么还要 ScrollView 呢,需求总是千
奇百怪的,看看下面这张图:
这两张图是一个界面,两个 ListView 嵌套在一个 ScrollView 中,用户可以操作的仅仅是滑动 ScrollView ,而
ListView 会根据内容自动调整高度,全部显示。
如果只是简单的将 ListView 的高度设为 wrap_content 的话,那么 ListView 并不会根据内容调整高度,而是只显示第
一条数据。
这里提出一种比较简单的解决办法,根据内容测量实际高度,然后在代码中设置 ListView 的高度:
private void setListViewHeightBasedOnChildren(ListView listView) {
if (listView == null) {
return;
}
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
measure 在 LinearLayout 中才能正常使用,如果是 RelativeLayout 则显示不正常。
本文介绍了一种在ScrollView中嵌套ListView的方法,并确保ListView能够根据内容自动调整高度以完全显示所有项的技术细节。
5637

被折叠的 条评论
为什么被折叠?



