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]

-------------本文结束  感谢您的阅读-------------
下次一定