view工作流程分为:measure、layout、draw
measure又分为View和viewGroup
其中VewGroup又可以分为DecorView(顶级View)和普通的ViewGroup
measure的决定因素:
MeasureSpec,测量说明书,32位的数值,前两位指定SpecMode(测量模式),后30位指定SpecSize(测量大小)
测量模式有三种:
unspecified(自测量模式)、exactly(精确指定模式)、at_most(最大模式)
measure的影响因素:
LayoutParams(布局参数,间接影响因素)通过影响MeasureSpec的数值从而间接影响到measure的数值
LayoutParams影响MeasureSpec的属性三种模式:LayoutParams.MACH_PARENT(匹配)、LayoutParams.WRAP_CONTENT、指定宽/高
MeasureSpec生成规则:
对于DecorView而言,自身的LayoutParams以及窗口的尺寸决定MeasureSpec
对于普通的ViewGrop以及View,父View的MeasureSpec和自身的LayoutParams决定其MeasureSpec:
measure又分为View和viewGroup
其中VewGroup又可以分为DecorView(顶级View)和普通的ViewGroup
measure的决定因素:
MeasureSpec,测量说明书,32位的数值,前两位指定SpecMode(测量模式),后30位指定SpecSize(测量大小)
测量模式有三种:
unspecified(自测量模式)、exactly(精确指定模式)、at_most(最大模式)
measure的影响因素:
LayoutParams(布局参数,间接影响因素)通过影响MeasureSpec的数值从而间接影响到measure的数值
LayoutParams影响MeasureSpec的属性三种模式:LayoutParams.MACH_PARENT(匹配)、LayoutParams.WRAP_CONTENT、指定宽/高
MeasureSpec生成规则:
对于DecorView而言,自身的LayoutParams以及窗口的尺寸决定MeasureSpec
对于普通的ViewGrop以及View,父View的MeasureSpec和自身的LayoutParams决定其MeasureSpec:
- LayoutParams指定宽/高时,父SpecMode对其不产生作用;此时其SpecMode为exactly,SpecSize为指定大小。
- LayoutParams.mach_parent时,父SpecMode若是exactly,此时其SpecMode为exactly,SpecSize为父view剩下大小(减去其他子view占的);若父SpecMode为at_most,此时其ModeSpec为at_most,SpecSize为父view剩余大小。
- LayoutParams.wrap_content时,父SpecMode若是exactly,此时其SpecMode为at_most,SpecSize为父view剩下大小;父SpecMode若是at_most,此时其SpecMode为at_most,SpecSize为父view剩下大小。