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

时间:2023-01-09 10:06:06
百度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内容不能看到,各位有什么好的解决方案,小生在这里先谢过了! 关于scrollview和listview嵌套的高度问题,涉及到listview中有自定义组件,高度计算不准确关于scrollview和listview嵌套的高度问题,涉及到listview中有自定义组件,高度计算不准确

15 个解决方案

#1


没人顶贴么,愁死我了 关于scrollview和listview嵌套的高度问题,涉及到listview中有自定义组件,高度计算不准确

#2


自定义LinearLayout外面一层是否可以再加一层,高度写死。

#3


你去eoe问问,那里人比较热情

#4


很好,一直在找这个,谢谢了,很强大

#5


遇到同样的问题。。。楼主有答案了给我说说

#6


第二种方式,应该是可行,如果你那不可以的话,应该是你控件的问题,建议把item的布局和自定义控件贴出来。

#7


我也遇到同样问题,楼主解决了吗??

#8


我也遇到同样问题,楼主解决了吗??

#9


你可以在adapter里面加一个变量,用于记录每次重新绘制的时候所有项加起来的总高度,之后再设置listview的总高度。

#10


楼主解决了没有,我也遇到同样的问题了

#11


求教啊,楼主,我这也总是显示不全。

#12


楼主,我也遇到这个问题了,死活解决不了,请问你解决了吗?

#13


不用listview三   动态addview 外面在包ScrollView

#14


换recycle不行么。。。

#15


是不是最下面item显示不全的情况,其他的item显示正常,如果是这样的话我遇到过,需要改变listview的属性设置,如果不是就算了

#1


没人顶贴么,愁死我了 关于scrollview和listview嵌套的高度问题,涉及到listview中有自定义组件,高度计算不准确

#2


自定义LinearLayout外面一层是否可以再加一层,高度写死。

#3


你去eoe问问,那里人比较热情

#4


很好,一直在找这个,谢谢了,很强大

#5


遇到同样的问题。。。楼主有答案了给我说说

#6


第二种方式,应该是可行,如果你那不可以的话,应该是你控件的问题,建议把item的布局和自定义控件贴出来。

#7


我也遇到同样问题,楼主解决了吗??

#8


我也遇到同样问题,楼主解决了吗??

#9


你可以在adapter里面加一个变量,用于记录每次重新绘制的时候所有项加起来的总高度,之后再设置listview的总高度。

#10


楼主解决了没有,我也遇到同样的问题了

#11


求教啊,楼主,我这也总是显示不全。

#12


楼主,我也遇到这个问题了,死活解决不了,请问你解决了吗?

#13


不用listview三   动态addview 外面在包ScrollView

#14


换recycle不行么。。。

#15


是不是最下面item显示不全的情况,其他的item显示正常,如果是这样的话我遇到过,需要改变listview的属性设置,如果不是就算了