理解view的Measure

MeasuerSpec 是一个32位的int值,由2种数据组合而成 ——

  1. 高2位代表 SpecMode
  2. 低30位代表 SpecSize

SpecMode 只有3个值,代表这个规格的模式
0 —— UNSPECIFIED 未指定
1 —— EXACTLY 精确值
2 —— AT_MOST 最大值

SpecSize 指的是这个规格的大小,单位是像素

一个View需要2个维度的MeasureSpec值,分别是 widthMeasureSpec、heightMeasureSpec,
分别代表着宽度的规格,高度的规格。
这2个维度的MeasureSpec都有一个相同的初始值——Integer.MIN_VALUE —— 0x80000000
具体是什么意思呢?
初始的 MeasureSpace 是 AT_MOST 且长度为 0,但这个初始值没什么卵用,在具体测量的时候就会被覆盖。

onMeasure()方法的2个spec是父容器提供的。表示父容器已经给你计算好一个预估值,用不用就看你了。

如果是直接继承view的话,需要自己重写onMeasure方法,并处理layoutParams.wrap_content的情况。否则就会默认以父容器的大小作为自己的尺寸。

view在测量自己的时候,不需要考虑自己的padding跟margin,父容器会搞定。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容