Android-MeasureSpec
MeasureSpec官方介绍如下:

MeasureSpec是由一个32位int值来表示的.其中该int值对应的二进制的高二位代表SpecMode,低30位代表SpecSize.
MeasureSpec源码看起来非常简单,里面的方法不多,就那么几个.

1. UNSPECIFIED
父容器不对子View有任何限制,子View要多大给多大,这样一般我们不会碰到(ScrollView)
2.EXACTLY
精确模式 View的大小已经确定,为SpecSize指定的值
3.AT_MOST
表示子View的大小不确定,指定了该子View最大能为多少,子View可以在指定的范围内设定自己的大小
例如xml中FrameLayout定义layout_width和layout_height是match_parent,那么根据MeasureSpece.getMode(measureSpec)获取的mode就是EXACTLY模式,如果layout_width设置的是wrap_content,width获取的mode就是AT_MOST模式.如果mode是EXACTLY模式,根据MeasureSpec.getSize(measureSpec)的size就是个确定值。
View的测量是一层一层去进行绘制的.首先会绘制ViewGroup,然后由ViewGroup去绘制子View.从View的measure方法可以看到传入了widthMeasureSpec和heightMeasureSpec.也就是说父ViewGroup去测量子View的时候,已经知道了子View的测量规格,也就是子View的测试模式和测试大小.子View的MeasureSpec是由父容器和子View的布局参数决定的。最终是通过setMeasuredDimension(int,int)来设置实际的大小.