笔记:动态获取ListView高度

来源:互联网 发布:安卓录屏软件 编辑:程序博客网 时间:2024/05/01 00:46
  1. public static void getTotalHeightofListView(ListView listView) {  
  2.     ListAdapter mAdapter = listView.getAdapter();   
  3.    if (mAdapter == null) {  
  4.        return;  
  5.    }  
  6.     int totalHeight = 0;  
  7.     for (int i = 0; i <</SPAN> mAdapter.getCount(); i++) {  
  8.         View mView = mAdapter.getView(i, null, listView);  
  9.         mView.measure(  
  10.                 MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),  
  11.                 MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));  
  12.         //mView.measure(0, 0);  
  13.         totalHeight += mView.getMeasuredHeight();  
  14.         Log.w("HEIGHT" + i, String.valueOf(totalHeight));  
  15.     }  
  16.     ViewGroup.LayoutParams params = listView.getLayoutParams();  
  17.     params.height = totalHeight           + (listView.getDividerHeight() * (mAdapter.getCount() - 1));  
  18.     listView.setLayoutParams(params);  
  19.     listView.requestLayout();      


1listviewitem的根布局一定要是LinearLayout

2、调用这个方法需要在适配器数据加载更新之后;代码如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. mAdapter.notifyDataSetChanged();  
  2. Function.getTotalHeightofListView(mListView);  

3、获取item的高度也可以用注释掉的代码,效果一样。


  1. <ListView  
  2.              android:id="@+id/getInfo"  
  3.              android:layout_width="fill_parent"  
  4.              android:layout_height="fill_parent"  
  5.              android:cacheColorHint="#FFF4F4F4"  
  6.              android:dividerHeight="0.0dip"   
  7.              android:fadingEdge="none" // 边界黑边  
  8.              />  


  1. public void setListViewHeightBasedOnChildren(ListView listView) {     
  2.         // 获取ListView对应的Adapter     
  3.         ListAdapter listAdapter = listView.getAdapter();     
  4.         if (listAdapter == null) {     
  5.             return;     
  6.         }     
  7.      
  8.         int totalHeight = 0;     
  9.         for (int i = 0, len = listAdapter.getCount(); i len; i++) {     
  10.             // listAdapter.getCount()返回数据项的数目     
  11.             View listItem = listAdapter.getView(i, null, listView);     
  12.             // 计算子项View 的宽高     
  13.             listItem.measure(0, 0);      
  14.             // 统计所有子项的总高度     
  15.             totalHeight += listItem.getMeasuredHeight();      
  16.         }     
  17.      
  18.         ViewGroup.LayoutParams params = listView.getLayoutParams();     
  19.         params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));     
  20.         // listView.getDividerHeight()获取子项间分隔符占用的高度     
  21.         // params.height最后得到整个ListView完整显示需要的高度     
  22.         listView.setLayoutParams(params);     
  23.     }  

1 0
原创粉丝点击