今天介绍一下怎么动态的获取listview的高度。看代码:
monospace, serif; font-size: 14px; vertical-align: baseline; background-color: #eeeeee;">
public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { // pre-condition return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); // listItem.measure(0, 0); listItem.measure( MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); listView.setLayoutParams(params); }
使用这个代码来获取listview的高度,需要注意一下几个问题:
1、listview的item的根布局一定要是LinearLayout;
2、调用这个方法需要在适配器数据加载更新之后;代码如下:
mAdapter.notifyDataSetChanged(); Function.getTotalHeightofListView(mListView);
3、获取item的高度也可以用注释掉的代码,效果一样的。