MeasuerSpec是android对于android view的尺寸的包装类,实质就是一个32位int值,
一个View的MeasureSpec除了由view的属性决定外,父容器也会对其造成影响
MeasureSpec由两部份组成,第一部分是Specmodel,其实就是measureSpec的高两位,第二部分是SpecSize,其实就是MeasureSpec的低30位,
SpecModel有三种模式,
-
UNSPECIFIED : 这个基本平时用不到,一般是系统内部使用的,
-
EXCATLY : 这个对于view的match_parent和具体设置的值,0x80000000
-
AT_MOST :这个对应view设置的wrap_content。0x40000000
子view的MeasuerSpec由父容器来测量getChildMeasureSpec,而对于rootview,则有getRootMeasureSpec产生,
子View的宽高属性与父容器的对于关系:
EXACTLY | AT_MOST | UNSPECIFIED | |
---|---|---|---|
wrap_content | AT_MOST | AT_MOST | UNSPECIFIED |
match_parent | EXACTLY | AT_MOST | UNSPECIFIED |
dp/px | EXACTLY | EXACTLY | EXACTLY |
父容器会对子view的MeasureSpec产生影响的原因:
getChildMeasureSpec(int mMeasureSpec,int parentPadding,int childWidthOrHeight)
其中mMeasureSpec
表示父容器的MeasureSpec
,这里可以看出,为什么父容器会影响子view的MeasureSpec。
网友评论