Android系统在绘制View之前,必须对View进行测量。Android提供的一个MeasureSpec类,来帮助我们测量View。MeasureSpec是一个32位的int值,其中高2位为测量的模式,低30位为测量的大小,在计算中使用位运算的原因是为了提供并优化效率,在自定义View的时候,同过重写onMeasure()方法来测量View的大小。
测试的模式为可以分为以下三种:
1、 EXACTLY(精确模式);即当我们为控件的高宽指定一个具体的大小,或者控件的高宽为匹配父控件的时候,系统使用的是EXACTLY。
2、 AT_MOST(最大模式);即当我们为控件的高宽的大小是包含内容的时候。
3、 UNSPECIFIED(不指定其大小模式) 这种这种情况不多,一般在父控件为AdpterView,通过measure方法传入的模式,因此在onMeasure()方法是要根据模式不同进行尺寸大小的计算。
View默认的onMeasure方法只支持EXACTLY模式,所以在自定义View的时候,如果在自定义控件的时候不重写onMeasure方法的时候,使用的只能是EXACTLY模式。
冲View源码onMeasure()方法可以看出,系统通过setMeasureDimension(int measuredWidth,intmeasreHegh