public static int resolveSizeAndState(int size, int measureSpec, int childMeasuredState) {
final int specMode = MeasureSpec.getMode(measureSpec);
final int specSize = MeasureSpec.getSize(measureSpec);
final int result;
switch (specMode) {
case MeasureSpec.AT_MOST:
//如果是上限这种mode
则比较一下有没有超过上限
if (specSize < size) {
//如果没越界则用用户定义的尺寸
result = specSize | MEASURED_STATE_TOO_SMALL;
} else {
//如果越界则用原尺寸
result = size;
}
break;
case MeasureSpec.EXACTLY:
//精确限制尺寸这种mode 则直接忽略用户定义的尺寸
result = specSize;
break;
case MeasureSpec.UNSPECIFIED:
//未定义,不执行任何的操作
default:
result = size;
}
return result | (childMeasuredState & MEASURED_STATE_MASK);
}