关于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内容不能看到,各位有什么好的解决方案,小生在这里先谢过了!


相关推荐
ScrollView嵌套ListView,解决显示不全的问题
ScrollView嵌套ListView,解决显示不全的问题
解决ScrollView嵌套ListView下拉刷新问题的完整方案
在Android开发中,为了实现复杂的UI布局效果,开发者常常需要将ListView嵌套在ScrollView中以达到整体可滑动的视觉体验。然而,这种嵌套结构会引发一系列严重的问题,最典型的就是滑动冲突、列表项显示不全以及性能下降等现象。由于ScrollView和ListView都继承自ViewGroup并具备自身的滚动机制,当两者叠加时,父容器ScrollView会拦截子控件ListView的触摸事件,导致ListView无法正常响应上下滑动操作,造成用户交互体验的断裂。
解决scrollview嵌套listview显示不全的四种方法
重新测量listview高度,或者自定义listview
Android解决ScrollView下嵌套ListView和GridView中内容显示不全的问题
今天小编就为大家分享一篇关于Android解决ScrollView下嵌套ListView和GridView中内容显示不全的问题,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
Scrollview中嵌套ViewPager和ListView常出现的问题
Scrollview中嵌套ViewPager和ListView常出现的问题: ViewPager如果在Scrollview中使用,并且宽高指定为match_parent或者wrap_content则不会显示内容,但是如果将高度指定为200dp,则ViewPager则会将内容显示到屏幕上 ListView同ViewPager类似,必须指定固定高度之后,才可以显示相应的高度,否则只显示一个Item的内容高度,然后在ListView区域上下滑动时,Scrollview并没有效果,而是实现的是ListView的上下滚动事件。


