笔记:动态获取ListView高度

本文介绍了如何在适配器数据加载更新后,通过优化代码实现ListView高度的精确计算,并详细解释了方法背后的原理和步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  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 plain copy 在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.     }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值