ListView的使用技巧-动态计算ListView的高度

今天遇到这样的一个问题,我在项目中要实现这样的一个效果,写了文本之后生成一条数据,然后放到ListView里面去显示,原来ListView因为数据是空是不显示的,然后他的高度也是WrapContant,这样将数据源设置到ListView里面之后,虽然他的数据增多了,但是整个ListView显示的地方却还是那么大,比如有三条数据了,每条数据的item的的高度为20dp,这样除去divider的高度之外,应该至少有60dp了。 但实际上,ListView整体占用的高度只有不到20dp,这60dp的内容就在这20dp的范围下面滚动,并不会根据ListView中item的高度以及个数来动态的调整整个ListView的高度,这时候,就需要我们根据整个ListView来计算它的高度了。
public class ScrollAndListViewUtil {
	/**
	 * 动态设置ListView的高度
	 * @param listView
	 */
	public static void setListViewHeightBasedOnChildren(ListView listView) { 
	    if(listView == null) return;

	    ListAdapter listAdapter = listView.getAdapter(); 
	    if (listAdapter == null) { 
	        return; 
	    } 

	    int totalHeight = 0; 
	    for (int i = 0; i < listAdapter.getCount(); i++) { 
	        View listItem = listAdapter.getView(i, null, listView); 
	        listItem.measure(0, 0); 
	        totalHeight += listItem.getMeasuredHeight(); 
	    } 

	    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
	    params.height = totalHeight + (1); 
//	    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
	    listView.setLayoutParams(params); 
	}
}
  [dl href='http://pan.baidu.com/s/1gd5sISb']代码下载[/dl]
setTransformationMethod的使用 2015-03-03
关于Fragment中获得Context的问题 2015-03-04

评论区