Android MeasureSpec 探索

在 android.view.View中有个静态内部类MeasureSpec,根据注释,我可以知道它类似一个工具类,用于辅助计算宽高和模式。
有3个常量
MeasureSpec.UNSPECIFIED 表示该view设置的是固定大小,和parent view大小无关,可以很大超过parent view的大小。
MeasureSpec.EXACTLY 表示parent view已经知道大小了,然后该view会采用parent view的大小,不会超过parent view的大小,对应MATCH_PARENT
MeasureSpec.AT_MOST 表示自己测量大小,自己该有多大用多大,可以超过parent view 的大小,对应WRAP_CONTENT

方法
MeasureSpec.makeMeasureSpec(int size, int mode)
用于创建包含了size和mode的measureSpec值,常用于listview之类的复用view中给child view mesaure。
MeasureSpec.getMode(int measureSpec) 从measureSpec中提取测量mode,只会返回上面3个常量中的某一个。
MeasureSpec.getSize(int measureSpec) 从measureSpec中提取测量后的具体大小值。
MeasureSpec.toString(int measureSpec) 帮助我们调试用的,因为measureSpec 值借助与一些移位运算我们很难直接读懂其中的值,所以这个可以生成measureSpec的size和mode可读信息。

最后介绍几个与测量相关的常用方法
View.resolveSize(int size, int measureSpec)
一般在onMeasure() 最后调用setMeasuredDimension(resolveSize(size,measureSpec),), 其实这个返回的和上面makeMeasureSpec() 值一样都可用于setMeasuredDimension()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值