ListView显示全部Item高度
2016-02-18 20:07
197 查看
首先,ListView不能直接用,要自定义一个,然后重写onMeasure()方法:
复制代码 代码如下:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
第二步:写个计算listView每个Item的方法:
复制代码 代码如下:
public void setListViewHeightBasedOnChildren(ListView listView) {
// 获取ListView对应的Adapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) { // listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
第三步:listview添加适配器后设置高度即可:
复制代码 代码如下:
listView.setAdapter(adapter);
new ListViewUtil().setListViewHeightBasedOnChildren(listView);
复制代码 代码如下:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
第二步:写个计算listView每个Item的方法:
复制代码 代码如下:
public void setListViewHeightBasedOnChildren(ListView listView) {
// 获取ListView对应的Adapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) { // listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
第三步:listview添加适配器后设置高度即可:
复制代码 代码如下:
listView.setAdapter(adapter);
new ListViewUtil().setListViewHeightBasedOnChildren(listView);
相关文章推荐
- jQuery的each方法的几种常用的用法
- Tomcat设置成NIO时,使用的线程池
- 河南第五届ACM省赛(最强DE 战斗力)(找规律+大数)
- 大学java考试题型
- php 设置字符集为utf-8
- 机器人开发--购买材料
- 寒假作业(1)
- iOS绘图教程
- js与原生通讯机制
- 上传AppStore遇到的奇葩问题之ERROR ITMS-90034: "Missing or invalid signature.
- Java 多线程数量
- some notice about slot funtions
- R 语言学习笔记三 : 操纵数据-重要函数的使用
- POJ 2724 Purifying Machine(二分图最大匹配)
- 编程坑
- 大头狼小鬼签到
- 安卓开源项目框架合集
- poj 2420 A Star not a Tree?
- Bootstrap复习三——CSS组件1
- mysql读书笔记一