在自定义View和ViewGroup的时候,我们经常会遇到int型的MeasureSpec来表示一个组件的大小:
//view.java
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
这里的两个int值分别代表组件的宽度和高度尺寸。这个值中它用一个int变量里来表示,其中既包含组件的尺寸大小,还有模式。
模式有三种:
UNSPECIFIED--组件的parent没有对它有任何约束,它可以自由决定大小
EXACTLY--父组件已经为它选择了精确的大小,那么它必须受到约束
AT_MOST--组件可以近可能大
int值如何同时表示模式和大小?
int占32bit,最高两位表示模式,低30位表示大小
00--UNSPECIFIED
01--EXACTLY
10--AT_MOST
定义了MODE_MASK=0x3 << 30;
public static int makeMeasureSpec(int size, int mode) {
return size + mode;
}
public static int getMode(int measureSpec) {
return (measureSpec & MODE_MASK);
}
public static int getSize(int measureSpec) {
return (measureSpec & ~MODE_MASK);
}