MeasureSpec是View.java中的一个静态类:
public static class MeasureSpec {
private static final int MODE_SHIFT = 30;
private static final int MODE_MASK = 0x3 << MODE_SHIFT;
// 父容器对子View没有任何限制,子View可以为任何值。
public static final int UNSPECIFIED = 0 << MODE_SHIFT;
// 父容器指定了子View精确的大小
public static final int EXACTLY = 1 << MODE_SHIFT;
// 父容器指定了子View的最大值
public static final int AT_MOST = 2 << MODE_SHIFT;
public static int makeMeasureSpec(@IntRange(from = 0, to = (1 << MeasureSpec.MODE_SHIFT) - 1) int size, @MeasureSpecMode int mode) {
if (sUseBrokenMakeMeasureSpec) {
return size + mode;
} else {
return (size & ~MODE_MASK) | (mode & MODE_MASK);
}
}
public static int getMode(int measureSpec) {
return (measureSpec & MODE_MASK);
}
public static int getSize(int measureSpec) {
return (measureSpec & ~MODE_MASK);
}
}
UNSPECIFIED:表示父容器对于子View没有任何限制,子View可以为任何值。
EXACTLY:表示父容器制定了子View精确的大小。
AT_MOST:表示父容器指定了子View的最大值。
MeasureSpec是由一个int值表示的。其中,int值的最高2位表示SpecMode,其余30位表示SpecSize。
为MeasureSpec所代表的int值,为总共32位,最高位是 ,最低位是 。
其中, 表示SpecMode, 表示SpecSize。