Android布局——listview会根据数据数量自动调节高度吗
最近在看一个项目的源码,有一个实现listview里嵌套listview的功能,实现方式是用Adapter嵌套Adapter。但是在主Adapter里,有一个函数用于更改子listview的布局高度。
public static void setListViewHeightBasedOnChildren(ListView listView) {
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);
}
显然这个函数会根据adapter中数据的个数调节listview布局的高度,那么为什么listview不会自己调节呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因为嵌套的ListView不需要也不应该能滚动
所以在代码中 需要将嵌套的ListView调整到刚好能显示所有Child的高度
而对于ListView本身而言,它是不关心自身高度和是否能显示下所有Child的,因为就原始设计上而言,它是一个可以滚动的组件.
你也可以自己阅读下面这段代码来看看ListView的measure自身高度的逻辑
看看MeasureSpec.UNSPECIFIED模式下ListView的高度是怎么来的
因为ListView要复用ConvertView