Android中MeasureSpec.UNSPECIFIED相关measure调用的疑问与规范
Android MeasureSpec 相关问题解答
1. 是否需要使用MeasureSpec.makeMeasureSpec搭配MeasureSpec.UNSPECIFIED值?
不需要。Android SDK已经提供了MeasureSpec.UNSPECIFIED这个现成的常量,直接使用即可,没必要额外调用MeasureSpec.makeMeasureSpec来构造该类型的MeasureSpec。
2. 以下两种measure函数调用是否存在区别?
① view.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED)
② view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED))
两者没有区别,在所有Android SDK版本中数值和效果都完全一致。因为MeasureSpec.UNSPECIFIED的底层实现就是通过MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)生成的——UNSPECIFIED模式下,尺寸数值会被忽略,只关注模式标识位,所以两种写法传递的参数本质是同一个东西。
传递measure函数参数的常规方式
- UNSPECIFIED模式:直接使用
MeasureSpec.UNSPECIFIED常量,代码简洁且符合官方规范。 - EXACTLY模式:通过
MeasureSpec.makeMeasureSpec(目标尺寸, MeasureSpec.EXACTLY)构造,用于给View指定固定宽高的场景。 - AT_MOST模式:通过
MeasureSpec.makeMeasureSpec(最大允许尺寸, MeasureSpec.AT_MOST)构造,用于限制View的最大测量尺寸,让View自行决定内部大小的场景。
内容的提问来源于stack exchange,提问作者Veniamin
相关产品推荐
相关产品推荐

