ListView和GridView根据item数量自适应高度的工具类封装

146 阅读1分钟

很多时候我们使用ListView和GridView由于item的高度不确定,是动态变化的,
这时候就需要自适应高度,可以考虑新建工具类放入下边的静态方法,使用的时候用类名调用方法传入GridView或者listview对象即可实现效果

   /**
     * ListView自适应高度的方法
     *
     * @param listView
     */
    public static void setListViewHeightBasedOnChild(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);

            listItem.measure(0, 0); // 计算子项View 的宽高

            totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度

        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();

        params.height = totalHeight
                + (listView.getDividerHeight() * (listAdapter.getCount() - 1));

        // listView.getDividerHeight()获取子项间分隔符占用的高度

        // params.height最后得到整个ListView完整显示需要的高度

        listView.setLayoutParams(params);

    }
}