【Android 非常基础】android官方不建议ScrollView嵌套ListView

Android官方是不建议ScrollView嵌套ListView的,官方有如下解释:

大概的意思是,不应该使用ScrollView嵌套ListView的,因为ListView会管理属于自己的垂直滚动。更重要的是,如果你这样做了,所有listview重要的优化都会被抵消掉,listview会被迫显示所有的item填满由ScrollView提供的容器。

实现ScrollView嵌套ListView的效果,有以下解决方案:

可以把非listView部分控件当成HeadView或FootView添加到Listview,或者把它当成Listview 子item布局的一部分,添加到ListView里面,充分利用ListView可以放多个不同布局的功能。


非得要用ScrollView嵌套ListView,有以下解决方案:

当ScrollView在嵌套ListView时,一般会出现ListView无法完全显示的问题,解决此问题有以下方案:

1.通过计算ListView每个item的高度,进行累加,设置ListView的LayoutParams.height,具体代码,百度就能找到好多。但这种方法有两个弊端:
  • tem的根布局必须是LinearLayout的,如果是其他布局会报错,大概是在调用item.measure()方法计算高度时报错;
  • 在item包含textview,并且textview显示多行文本时,此方法计算得到的高度是不准确的。
2.可通过重写ListView的onMeasure方法,执行以下语句

      int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);

      super.onMeasure(widthMeasureSpec, expandSpec);

来使ListView可完全显示。意思大概是,父控件你必须得腾出给我ListView最大的空间是Integer.MAX_VALUE >> 2,那么我才不至于不能完全显示。至于为什么是这个值,而不是别的值,我还没有研究出来。


以上仅是个人看法,如有不同意见,可以讨论。多谢。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值