美文网首页
ScrollView与ListView合用(计算Listview

ScrollView与ListView合用(计算Listview

作者: CoolKin | 来源:发表于2018-03-20 10:29 被阅读0次

    最近项目中碰到ScrollView嵌套ListView,搞了好久,ListView一直显示不全,网上找了好久,最终解决了,在此记录下,避免下次遇到时忘记

    最初以为获取下ListView的高度,然后重新设置下ListView高度就可以了,代码如下

    public void setLisViewHight(ListView listView) {
            //获取listview的adapter
            ListAdapter mAdapter = (ListAdapter) listView.getAdapter();
            if (mAdapter == null) {
                return ;
            }
            int totalHeight = 0;
            //重复获取listview的子view的高度
            for (int i = 0; i < mAdapter.getCount(); i++) {
                //获取子view
                View mView = mAdapter.getView(i, null, listView);
                //获取子view的高度
                mView.measure(
                        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
                //叠加子view的高度,最终计算所有view的高度
                totalHeight += mView.getMeasuredHeight();
            }
            ViewGroup.LayoutParams params = listView.getLayoutParams();
            //最终listview高度是所有子view高度以及所有间隔的高度
            //listView.getDividerHeight() 获取listview一个间隔的高度
            //params.height即listview的高度
            params.height = totalHeight + (listView.getDividerHeight() * (mAdapter.getCount() - 1));
            listView.setLayoutParams(params);
            return ;
        }
    

    但设置完后,发现ListView的高度还是不对,最终在网上搜索发现,只需要自定义一个ListView,重写onMeasure()方法,就可以让ListView自适应高度,如下

    public class MyListview extends ListView {
    
        public MyListview(Context context) {
            super(context);
        }
    
    
        public MyListview(Context context, AttributeSet attrs, int defStyleAttr,
                          int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
        }
    
    
        public MyListview(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
    
        public MyListview(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
    
        /**
         * 重写该方法,达到使ListView适应ScrollView的效果
         */
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                    MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, expandSpec);
        }
    
    }
    

    相关文章

      网友评论

          本文标题:ScrollView与ListView合用(计算Listview

          本文链接:https://www.haomeiwen.com/subject/bsdpqftx.html