MeasureSpec

MeasuerSpec是android对于android view的尺寸的包装类,实质就是一个32位int值,

一个View的MeasureSpec除了由view的属性决定外,父容器也会对其造成影响

MeasureSpec由两部份组成,第一部分是Specmodel,其实就是measureSpec的高两位,第二部分是SpecSize,其实就是MeasureSpec的低30位,

SpecModel有三种模式,

  1. UNSPECIFIED : 这个基本平时用不到,一般是系统内部使用的,

  2. EXCATLY : 这个对于view的match_parent和具体设置的值,0x80000000

  3. 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。


UNSPECIFIED,到底什么情况下才会是这种model

你可能感兴趣的:(MeasureSpec)