关于scrollview和listview嵌套的高度问题,涉及到listview中有自定义组件,高度计算不准确

wiz_Chen 2015-03-27 10:20:45
百度google了很久,发现关于scrollview和listview嵌套时,总是不能计算listview高度这个问题现在都流行这两种做法
1:在自定义listview中重写onMeasure()方法:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}

2:在listview设定自定义adapter后计算每项adapter的高度,然后计算总的高度再设置:
public void setListViewHeightBasedOnChildren(ListView listView) {
// 获取ListView对应的Adapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}

int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) { // listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, listView);
// int desiredWidth= View.MeasureSpec.makeMeasureSpec(listView.getWidth(), View.MeasureSpec.AT_MOST);
listItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
}

ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}


目前这两种方案是比较流行的.但是我今天遇到一个问题,项目上必须用scrollview嵌套listview实现,但是我的listview的每个item中或许会存在自定义组件(是LinearLayout),本人的理解是以上两种方案都不能计算到这个自定义组件的高度,所以一直会有部分listview内容不能看到,各位有什么好的解决方案,小生在这里先谢过了!
...全文
963 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
small_technical 2016-12-14
  • 打赏
  • 举报
回复
是不是最下面item显示不全的情况,其他的item显示正常,如果是这样的话我遇到过,需要改变listview的属性设置,如果不是就算了
lpk_6 2016-12-13
  • 打赏
  • 举报
回复
换recycle不行么。。。
_周星星 2016-12-07
  • 打赏
  • 举报
回复
不用listview三 动态addview 外面在包ScrollView
dogKnight_92 2016-12-07
  • 打赏
  • 举报
回复
楼主,我也遇到这个问题了,死活解决不了,请问你解决了吗?
qq_33487519 2016-05-17
  • 打赏
  • 举报
回复
求教啊,楼主,我这也总是显示不全。
chaozhidan 2016-04-29
  • 打赏
  • 举报
回复
楼主解决了没有,我也遇到同样的问题了
wei220000 2016-01-26
  • 打赏
  • 举报
回复
你可以在adapter里面加一个变量,用于记录每次重新绘制的时候所有项加起来的总高度,之后再设置listview的总高度。
qq_28951841 2016-01-25
  • 打赏
  • 举报
回复
我也遇到同样问题,楼主解决了吗??
qq_28951841 2016-01-25
  • 打赏
  • 举报
回复
我也遇到同样问题,楼主解决了吗??
名字要长一点 2015-11-12
  • 打赏
  • 举报
回复
第二种方式,应该是可行,如果你那不可以的话,应该是你控件的问题,建议把item的布局和自定义控件贴出来。
androidwangc 2015-11-11
  • 打赏
  • 举报
回复
遇到同样的问题。。。楼主有答案了给我说说
qq_31499357 2015-09-22
  • 打赏
  • 举报
回复
很好,一直在找这个,谢谢了,很强大
雷杰-- 2015-03-30
  • 打赏
  • 举报
回复
自定义LinearLayout外面一层是否可以再加一层,高度写死。
ceekay_ 2015-03-30
  • 打赏
  • 举报
回复
你去eoe问问,那里人比较热情
wiz_Chen 2015-03-29
  • 打赏
  • 举报
回复
没人顶贴么,愁死我了

80,331

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧