/**
* 动态设置GridView的高度
* @param gridView
*/
public static void setListViewHeightBasedOnChildren(GridView gridView) {
// 获取gridview的adapter
ListAdapter listAdapter = gridView.getAdapter();
if (listAdapter == null) {
return;
}
// 固定列宽,有多少列
int col = 3;// 或者gridView.getNumColumns();
int totalHeight = 0;
// i每次加3,相当于listAdapter.getCount()小于等于3时 循环一次,计算一次item的高度
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()+ DisplayUtils.dip2px(10);
}
// 获取listview的布局参数
ViewGroup.LayoutParams params = gridView.getLayoutParams();
// 设置高度
params.height = totalHeight;
// 设置参数
gridView.setLayoutParams(params);
}
之所以用到动态设置GridView的高度,因为需要在ScrollView中嵌套GridView
DisplayUtils.dip2px(10)这个地方是horizontalSpacing的值为10dp,转为px,item的高度+item之间的垂直间距才是真实的高度