(4.3.2.2)ListView 动态设置高度问题
2016-04-26 15:08
369 查看
今天开发遇到一个问题,就是当动态插入ListView数据的时候,由于之前ListView的高度已经固定死了,所以显示不完整的数据,并且底部显示黑边。如图:
![](http://img.my.csdn.net/uploads/201212/04/1354610610_9494.png)
而我希望这个ListView可以动态的改变高度:
![](http://img.my.csdn.net/uploads/201212/04/1354610616_4662.png)
当时第一个想到的解决办法就是在setAdapter之后去重新修改ListView的高度,但是发现设置match_parent或wrap_content没有效果,只能设置一个固定的高度。但是显然我的数据长度是不定的,所以设置固定高度不显示。
最后采用的办法是:
[java] view
plain copy
public void setListViewHeightBasedOnChildren(ListView listView) {
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
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
((MarginLayoutParams) params).setMargins(10, 10, 10, 10); // 可删除
listView.setLayoutParams(params);
}
[html] view
plain copy
<ListView
android:id="@+id/getInfo"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#FFF4F4F4"
android:dividerHeight="0.0dip"
android:fadingEdge="none" // 边界黑边
/>
![](http://img.my.csdn.net/uploads/201212/04/1354610610_9494.png)
而我希望这个ListView可以动态的改变高度:
![](http://img.my.csdn.net/uploads/201212/04/1354610616_4662.png)
当时第一个想到的解决办法就是在setAdapter之后去重新修改ListView的高度,但是发现设置match_parent或wrap_content没有效果,只能设置一个固定的高度。但是显然我的数据长度是不定的,所以设置固定高度不显示。
最后采用的办法是:
[java] view
plain copy
public void setListViewHeightBasedOnChildren(ListView listView) {
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
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
((MarginLayoutParams) params).setMargins(10, 10, 10, 10); // 可删除
listView.setLayoutParams(params);
}
[html] view
plain copy
<ListView
android:id="@+id/getInfo"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#FFF4F4F4"
android:dividerHeight="0.0dip"
android:fadingEdge="none" // 边界黑边
/>
相关文章推荐
- (4.3.2.1)Android ListView点击展开收起效果(一)
- ElasticSearch学习14_elasticsearch 口水篇(3)java客户端 - Jest
- Window系统部署在本地的IIS7里以后,结果不能访问承载SL的.aspx页面
- 【51NOD 1478】括号序列的最长合法子段
- .Net实现微信公众平台开发接口(二) 之 “获取access_token”
- word2007怎么转换成pdf格式
- Golang的TLS通信,证书文件使用.
- 记录linux软件源代理服务器设置方法
- 最全面的 Android 编码规范指南
- 让屏幕保持竖屏
- 'net’ 不是内部命令或外部命令,也不是可运行的程序或批处理文件
- 百度地图问题汇总
- UE3名称结构(Name)
- 文件管理 - 1
- 给 Android 开发者的 RxJava 详解
- javascript处理HTML的Encode(转码)和Decode(解码)总结
- Java相对路径读取文件
- 【java线程系列】java线程系列之线程间的交互wait()/notify()/notifyAll()及生产者与消费者模型
- cocos2dx 创建精灵的5种方式
- 一句话来填坑(持续更新)