MeasureSpec 是View 的内部类,封装了一个View的规格尺寸,包括View的宽和高的信息。它的作用是在Measure流程中,系统会将LayoutParagrams根据父容器所施加的规则转换成对应的measureSpec ,然后在onMeasure方法中根据这个MeasureSpec 来确定view的宽高。
MeasureSpec 的代码这里不再赘述。
看过MeasureSpec的代码后会发现 MeasureSpec的常量 是32位的int值,其中高2位代表了SpecMode,低30位代表SpecSize。SpecMode代表view的测量模式,SpecSize代表view的测量大小。其中 SpecMode有三种模式:
1.UNSPECIFIED:未指定模式,View想多大就多大,父容器不做限制,一般用于系统内部的测量。
2.AT_MOST:最大模式,对应于wrap_content属性,子View 的最终大小是父View指定的SpecSize值,并且 子View 的大小不能大于这个值。
3.EXACTLY:精确模式,对应于match_parent属性和具体的数值,父容器测量出View所需要的大小,也就是SpecSize。
网友评论