美文网首页小技巧
动态设置listview的高度

动态设置listview的高度

作者: 晚睡晚起的 | 来源:发表于2016-07-09 11:27 被阅读967次

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

}

相关文章

网友评论

    本文标题:动态设置listview的高度

    本文链接:https://www.haomeiwen.com/subject/ykirjttx.html