项目:共享男友遇到的问题

2017-10-19  本文已影响10人  嘿张开心

一、在ScrollView中嵌套GridView的两种解决方案:
1.自定GridView让它的高最大。
2.获得GridView的Item的数量,然后算出每个Item的高。GridView的高等于:每个Item的高Item的数量+每个Item上下间距行数-1
//坑 坑 坑
GridView的Item的布局的跟布局必须是wrap_content
GridView的Item的布局的跟布局必须是wrap_content
GridView的Item的布局的跟布局必须是wrap_content

 public void setGridViewHeightBasedOnChildren(GridView gridView, int columns) {
        ListAdapter listAdapter = gridView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }
        int totalHeight = 0;
        //获取Item的数量
        int items = listAdapter.getCount();
        //获取GridView的第一个item
        View listItem = listAdapter.getView(0, null, gridView);
        //测量子Item
        listItem.measure(0, 0);
        //获取子Item的高度
        totalHeight = listItem.getMeasuredHeight();
        //如果item的数量的==1||==0的时候,columns应该==1
        int rows;
        //计算行数
        if (items > columns) {
            rows = items % columns == 0 ? items / columns : items / columns + 1;
        } else {
            rows = 1;
        }
        totalHeight *= rows;
        //计算所有行间距
        int totalVerticalSpacingHeight = gridView.getVerticalSpacing() * (rows - 1);
        ViewGroup.LayoutParams params = gridView.getLayoutParams();
        params.height = totalHeight+totalVerticalSpacingHeight;
        gridView.setLayoutParams(params);
}

二、动态设置GridView Item的宽高,第一项Item的不起作用

private void setItemWH(View convertView) {
        //动态设置Item的宽高
        //获取列数
        int columns = gridView.getNumColumns();
        //获取每个Item之间的横向间距的和
        int totalHorSpacing = gridView.getHorizontalSpacing() * (columns - 1);
        //获取GridView的宽度
        int parentWidth = gridView.getWidth();
        //计算每个Item的宽度
        int itemWidth = (parentWidth - totalHorSpacing) / columns;
        ViewGroup.LayoutParams params = convertView.getLayoutParams();
        params.width = itemWidth;
        params.height = itemWidth;
        convertView.setLayoutParams(params);
    }

解决:都需要设置

if (view == null) {  
       setItemWH(convertView);
    } else {  
        holder = (Holder) view.getTag();  
     setItemWH(convertView);
    }
上一篇 下一篇

猜你喜欢

热点阅读