1:在自定义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);
}
2:在listview设定自定义adapter后计算每项adapter的高度,然后计算总的高度再设置:
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);
// int desiredWidth= View.MeasureSpec.makeMeasureSpec(listView.getWidth(), View.MeasureSpec.AT_MOST);
listItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
目前这两种方案是比较流行的.但是我今天遇到一个问题,项目上必须用scrollview嵌套listview实现,但是我的listview的每个item中或许会存在自定义组件(是LinearLayout),本人的理解是以上两种方案都不能计算到这个自定义组件的高度,所以一直会有部分listview内容不能看到,各位有什么好的解决方案,小生在这里先谢过了!
15 个解决方案
#1
没人顶贴么,愁死我了
#2
自定义LinearLayout外面一层是否可以再加一层,高度写死。
#3
你去eoe问问,那里人比较热情
#4
很好,一直在找这个,谢谢了,很强大
#5
遇到同样的问题。。。楼主有答案了给我说说
#6
第二种方式,应该是可行,如果你那不可以的话,应该是你控件的问题,建议把item的布局和自定义控件贴出来。
#7
我也遇到同样问题,楼主解决了吗??
#8
我也遇到同样问题,楼主解决了吗??
#9
你可以在adapter里面加一个变量,用于记录每次重新绘制的时候所有项加起来的总高度,之后再设置listview的总高度。
#10
楼主解决了没有,我也遇到同样的问题了
#11
求教啊,楼主,我这也总是显示不全。
#12
楼主,我也遇到这个问题了,死活解决不了,请问你解决了吗?
#13
不用listview三 动态addview 外面在包ScrollView
#14
换recycle不行么。。。
#15
是不是最下面item显示不全的情况,其他的item显示正常,如果是这样的话我遇到过,需要改变listview的属性设置,如果不是就算了
#1
没人顶贴么,愁死我了
#2
自定义LinearLayout外面一层是否可以再加一层,高度写死。
#3
你去eoe问问,那里人比较热情
#4
很好,一直在找这个,谢谢了,很强大
#5
遇到同样的问题。。。楼主有答案了给我说说
#6
第二种方式,应该是可行,如果你那不可以的话,应该是你控件的问题,建议把item的布局和自定义控件贴出来。
#7
我也遇到同样问题,楼主解决了吗??
#8
我也遇到同样问题,楼主解决了吗??
#9
你可以在adapter里面加一个变量,用于记录每次重新绘制的时候所有项加起来的总高度,之后再设置listview的总高度。
#10
楼主解决了没有,我也遇到同样的问题了
#11
求教啊,楼主,我这也总是显示不全。
#12
楼主,我也遇到这个问题了,死活解决不了,请问你解决了吗?
#13
不用listview三 动态addview 外面在包ScrollView
#14
换recycle不行么。。。
#15
是不是最下面item显示不全的情况,其他的item显示正常,如果是这样的话我遇到过,需要改变listview的属性设置,如果不是就算了