onMeasure方法的两个参数widthMeasureSpec,heightMeasureSpec这两个值是由父视图经过计算后传递给子视图的。
MeasureSpec值由specMode和specSize共同组成,onMeasure两个参数的作用根据specMode的不同,有所区别。
当specMode为EXACTLY时,子视图的大小会根据specSize的大小来设置;
当specMode为AT_MOST时,这两个参数只表示了子视图当前可以使用的最大空间大小,而子视图的实际大小不一定是specSize。所以我们自定义View时,重写onMeasure方法主要是在AT_MOST模式时,为子视图设置一个默认的大小。
测试代码:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//查看不同模式下,widthMeasureSpec和heightMeasureSpec两个参数的值
Log.i(