进入View---> measureHierarchy()
measureHierarchy() --- > getRootMeasureSpec()
调用getRootMeasureSpec这个方法来获取它的宽高根的MeasureSpec
getRootMeasureSpec()
MeasureSpec是定义在一个View类当中的一个静态内部类,它其实就是代表了一个限定池
UNSPECIFIED:表示我们的父View不会对子View有任何的约束.这样子View就可以打到我们想要的最大尺寸
EXACTLY:父View为子View指定了一个尺寸,无论子View想要多大都必须在这个尺寸最大值的边界内
AT_MOST:为子View指定了一个最大尺寸,那么就要确保他所有的子子View都在最大范围内
measureHierarchy()--->performMeasure() 进行下一步的测量计算
mView 就是 DetorView:
performMeasureperformMeasure() --- > measuer() 看一下具体的算法
这个方法最终会调用一个onMeasure(int , int )方法
measuer measuermeasuer() ---> onMeasure(int , int )
onMeasure()这个方法是可以被覆写的,所以说当我们在自定义View的时候直接覆写这个方法就好了
根据这两个限定好的值去计算View的宽和高
要根据不同的模式进行不同的计算
内部会调用setMeasedDimension()这个方法是测量阶段最终的一个方法,它会得到一个具体的尺寸.
网友评论