zoukankan      html  css  js  c++  java
  • andorid ListView和GirdView 与ScrollView 冲突

    1.listview解决方法

    public static void setListViewHeightBasedOnChildren(ListView listView) {
        if(listView == null) return;
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            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);
    }
    

     2.gridview解决方法

     public static void setGridViewHeightBasedOnChildren(GridView gridView){
            // 获取listview的adapter
            ListAdapter listAdapter = gridView.getAdapter();
            if (listAdapter == null) {
                return;
            }
            // 固定列宽,有多少列
            int col = 3; //gridView.getNumColumns();
            int totalHeight = 0;
            // i每次加4,相当于listAdapter.getCount()小于等于4时 循环一次,计算一次item的高度,
            // listAdapter.getCount()小于等于8时计算两次高度相加
            for (int i = 0; i < listAdapter.getCount(); i += col) {
                // 获取listview的每一个item
                View listItem = listAdapter.getView(i, null, gridView);
                listItem.measure(0, 0);
                // 获取item的高度和
                totalHeight += listItem.getMeasuredHeight();
            }
    
            // 获取listview的布局参数
            ViewGroup.LayoutParams params = gridView.getLayoutParams();
            // 设置高度
            params.height = totalHeight+20;
            // 设置margin
            ((ViewGroup.MarginLayoutParams) params).setMargins(10, 10, 10, 10);
            // 设置参数
            gridView.setLayoutParams(params);
        }
    

    3.自定义ListView

    public class CustomListView extends ListView {
        public CustomListView(Context context) {
            super(context);
        }
    
        public CustomListView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public CustomListView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
        @Override
        public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
                     int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                                     MeasureSpec.AT_MOST);
                     super.onMeasure(widthMeasureSpec, expandSpec);
                 }
    
    }
    
  • 相关阅读:
    【2021-01-01】爱自己等于爱家人
    【2020-12-31】2020的收获与2021的挑战
    【2020-12-30】说别人辛苦,其实是自己辛苦
    【一句日历】2021年1月
    最大子序和
    判断子序列
    下载安装 ethereal
    6812. 【2020.10.05提高组模拟】战争
    6816. 【2020.10.06提高组模拟】随机的排列
    python 版本及pip安装相关
  • 原文地址:https://www.cnblogs.com/hualuoshuijia/p/6950200.html
Copyright © 2011-2022 走看看