Android学习 之 问题&解答 ScrollView中嵌套ListView时显示不全的简便解决方案
参考自:http://stackoverflow.com/questions/3495890/how-can-i-put-a-listview-into-a-scrollview-without-it-collapsing/3495908#3495908
?
利用下面这个Utility 类的静态方法setListViewHeightBasedOnChildren()即可实现:
?
?
?
在listview.setAdapter()之后调用Utility.setListViewHeightBasedOnChilren(listview)就Okay 了。public class Utility {public static void setListViewHeightBasedOnChildren(ListView listView) {//获取ListView对应的AdapterListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) {// pre-conditionreturn;}int totalHeight = 0;for (int i = 0, len = listAdapter.getCount(); i < len; 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控件的高度。
1 楼 androidHome 2011-10-19 兄台请问listView本身需要设置哪些属性?我也遇到和你同样的问题,引用上面这个工具类设置高度以后发现并没有起到什么效果,不知道是不是我代码里面还缺些什么设置,多谢多谢!2 楼 androidHome 2011-10-19 哦,补充一下,我这没有给ListView写xml布局文件,只是给其中的listview item写了xml布局文件。 3 楼 ldci3gandroid 2011-10-21 androidHome 写道兄台请问listView本身需要设置哪些属性?我也遇到和你同样的问题,引用上面这个工具类设置高度以后发现并没有起到什么效果,不知道是不是我代码里面还缺些什么设置,多谢多谢!
应该是你没设置对,你可以把问题描述的清楚些吗 呵呵 4 楼 yunlike1986 2011-10-27 我调用这个方法测量的ListView每一项的高度都是58,雷打不动,不知道是什么原因导致的 5 楼 zx1326687 2011-11-17 很奇怪,我一直在listItem.measure(0, 0); //计算子项View 的宽高 这里出错,都是报空指针异常,这是什么问题?! 6 楼 ldci3gandroid 2011-11-29 yunlike1986 写道我调用这个方法测量的ListView每一项的高度都是58,雷打不动,不知道是什么原因导致的
雷打不动的 那肯定是代码问题了 建议你好好检查一下 7 楼 ldci3gandroid 2011-11-29 zx1326687 写道很奇怪,我一直在listItem.measure(0, 0); //计算子项View 的宽高 这里出错,都是报空指针异常,这是什么问题?!
空指针错误很好查的 肯定是哪个对象为null 请仔细检查一遍 8 楼 learner576539763 2012-03-06 真的是空指针。。。。。 打上log 显示所需的对象都得到了 但就是提示listItem.measure(0, 0);处有空 楼主 能给指点下吗 9 楼 yahier 2012-04-05 learner576539763 写道真的是空指针。。。。。 打上log 显示所需的对象都得到了 但就是提示listItem.measure(0, 0);处有空 楼主 能给指点下吗
我也遇到 我的解决办法是将 listview的item的布局从relativelayout 改成linearlayout 不过我也不知道原理