/**
* 固定列数,根据item数量动态设置GridView高度
* @param listView
*/
public static void setGridViewHeight(GridView listView) {
// 获取listview的adapter
ListAdapter listAdapter = listView.getAdapter()
if (listAdapter == null) {
return
}
// 固定列宽,有多少列
int col = 3
int totalHeight = 0
// i每次加4,相当于listAdapter.getCount()小于等于4时 循环一次,计算一次item的高度,
// listAdapter.getCount()小于等于8时计算两次高度相加
for (int i = 0
// 获取listview的每一个item
View listItem = listAdapter.getView(i, null, listView)
listItem.measure(0, 0)
// 获取item的高度和
totalHeight += listItem.getMeasuredHeight()
}
// 获取listview的布局参数
ViewGroup.LayoutParams params = listView.getLayoutParams()
// 设置高度
params.height = totalHeight
// 设置margin
// ((ViewGroup.MarginLayoutParams) params).setMargins(10, 10, 10, 10)
// 设置参数
listView.setLayoutParams(params)
}
自定义控件的方式实现:
public class CustomGridView extends GridView {
public CustomGridView(Context context) {
super(context);
}
public CustomGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomGridView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public CustomGridView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, height);
}
}