一、在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);
}
网友评论