http://blog.youkuaiyun.com/aigestudio/article/details/38636531
MeasureSpec
UNSPECIFIED
EXACTLY
AT_MOST
Constants
private static final int MODE_SHIFT
private static final int MODE_MASK
public static final int UNSPECIFIED
public static final int EXACTLY
public static final int AT_MOST
Methods
public static int getMode(int measureSpec)
该方法与getSize类似,是从MeasureSpec值中获取mode值,这里我在布局文件中设置该自定义控件的layout_width为match_parent:public static int makeMeasureSpec(int size, int mode)
static int adjust(int measureSpec, int delta)
该方法是一个默认修饰符方法,仅供android.view包调用,View中不会直接调用上面的makeMeasureSpec方法但是会通过该方法的封装来间接地在measure方法中调用makeMeasureSpec方法,该方法会对View的布局长宽作调整,具体我在将View类的measure方法再说,其实现如下,其实看看计算过程你也能略知一二:- int mode = getMode(measureSpec);
- int size = getSize(measureSpec);
- StringBuilder sb = new StringBuilder("MeasureSpec: ");
- if (mode == UNSPECIFIED)
- sb.append("UNSPECIFIED ");
- else if (mode == EXACTLY)
- sb.append("EXACTLY ");
- else if (mode == AT_MOST)
- sb.append("AT_MOST ");
- else
- sb.append(mode).append(" ");
- sb.append(size);
- return sb.toString();