public void setListViewHeighBasedOnChildren(ListView listView){
//获取listView 对应的adapter
ListAdapter listAdapter=listView.getAdapter();
if(listAdapter==null){
return ;
}
int totalHeight=0;
int len=listAdapter.getCount();
//注:如果每个listview的条目一样高,就不必测量每个条目的高度,只需测量一个条目的高度*条目的个数
for(int i=0;i<len;i++){//测量listview的每个条目高度
View listItem=listAdapter.getView(i,null,listView);
//计算子项view的宽高
listItem.measure(0,0);
//统计所有子项的总高度
totalHeight+=listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params=listView.getLayoutParams();
//listView.getDividerHeight()获取子项间分隔符占用的高度
params.height=totalHeight+listView.getDividerHeight()*(listAdapter.getCount()-1);
listView.setLayoutParams(params);
}
需要注意的是:ListView条目布局的根节点必须是LineLayout,不然也会无法显示ListView的完整高度。