Listview和ScrollView为什么展示不全及如何解决

2019-03-22  本文已影响0人  风一样的code

大家在使用ListView和ScrollView嵌套时会发现ListView无法全部展开,这是为什么呢?

看一下源码就很好理解了

ScrollView在测量子View的时候,会强制把子View的MeasureSpec模式改为MeasureSpec.UNSPECIFIED,然后再看一下Listview的onMeasure方法

当模式为MeasureSpec.UNSPECIFIED的时候,ListView的高度会别设置为子View的高度加上 top和bottom的padding值

所以ListView和ScrollView嵌套使用无法展开,只能显示一个条目;

那么如何解决呢

因为是ListView的测量问题,所以自然而然的就会想到重写ListView的onMeasure方法;

更改它的测量模式,看上图当MeasureSpec为AT_MOST的时候返回的heightSize的高度是所有子 View的总高度

重写后如下图

至于为什么还要有一个Integer.MAX_VALUE>>2,大家可以访问 为什么MAX_VALUE>>2了解一下

代码动手巧一下吧,复制粘贴不如亲自动手,加油,喜欢的小伙伴记得点个赞呦~

上一篇 下一篇

猜你喜欢

热点阅读