热门搜索 :
考研考公
您的当前位置:首页正文

动态设置listview的高度

来源:东饰资讯网

当我们使用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);

}

Top