当我们使用ScrollView中嵌套ListView空间,无法正确的计算ListView的大小,故可以通过代码,根据当前的ListView的列表项计算列表的尺寸。实现代码如下:
privatevoidsetListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();if(listAdapter ==null) {// pre-conditionreturn;
}inttotalHeight =0;for(inti =0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i,null, listView);
listItem.measure(0,0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParamsparams= listView.getLayoutParams();params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() -1));
listView.setLayoutParams(params);
}
使用该方法需要注意:子ListView的每个Item必须是LinearLayout,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。
2、 自定义ListView,重载onMeasure()方法,设置全部显示
/**
* Integer.MAX_VALUE >> 2,如果不设置,系统默认设置是显示两条
*/publicvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec) {intexpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >>2,
MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec, expandSpec);
}