ScrollView 嵌套 ListView 只显示第一行的源码分析

要带着问题来阅读源码,解惑以满足心中的好奇心,知其然并知其所以然,了解发现 Google 工程师的代码设计原理。

1、猜测是在 onMeasure 的时候,只测量了第一个 item。

在 MeasureSpec.UNSPECIFIED 的时候,只是拿到了 第 1 个 item 的高度。 在 MeasureSpec.AT_MOST 的时候,会把 ListView 的 view 全部加载。

推测在 ScrollView 里面的测量模式 是 MeasureSpec.UNSPECIFIED。

2、解决方法: 自定义 ListView ,重写 onMeasure 方法,

int heightSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthSpec, heightSpec);

在这里把我们的 ListView 重新赋值成 AT_MOST。

(1、这里的 size 右移两位,是因为 size 低30位, 高两位是 mode。

2、MeasureSpec.UNSPECIFIED 一般是在源码里面调用)

转载于:https://juejin.im/post/5baa3e00f265da0a8a6aae1c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值