android.view.View.MeasureSpec

MeasureSpec是View的内部类

public static class MeasureSpec

MeasureSpec封装从parent传递给child的layout要求。每个MeasureSpec表示对width/height的要求。MeasureSpec由size和mode组成。可用的mode有3种:

1. UNSPECIFIED表示parent没有强加给child任何constraint。

2. EXACTLY表示parent已经确定child的精确size。

3. AT_MOST表示child可以设定为specified size之内的任何值。

MeasureSpec实现为int类型,相比object类型,降低了allocation。可以将<size, mode>元组pack和unpack为int类型。

MeasureSpec定义的常量有:

private static final int MODE_SHIFT = 30;

private static final int MODE_MASK = 0x3 << MODE_SHIFT;

public static final int UNSPECIFIED = 0 << MODE_SHIFT;

public static final int EXACTLY = 1 << MODE_SHIFT;

public static final int AT_MOST = 2 << MODE_SHIFT;

MeasureSpec定义的方法有:

public static String toString(int measureSpec) {
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();
}

public static int getSize(int measureSpec) {
return (measureSpec & ~MODE_MASK);
}

public static int getMode(int measureSpec) {
return (measureSpec & MODE_MASK);
}

public static int makeMeasureSpec(int size, int mode) {
return size + mode;
}

更多相关文章

  1. 自定义ActionBar的indeterminateProgress样式
  2. android点击一个Button打开另外一个activity
  3. android之自定义组合控件
  4. android 传递自定义参数
  5. Android(安卓)高级自定义Toast及源码解析
  6. android中自定义标签ImageButton
  7. 自定义Android(安卓)标题栏TitleBar布局
  8. android 代码混淆示例
  9. Android使用自定义view在指定时间内匀速画一条直线的实例代码

随机推荐

  1. android xliff字符串操作
  2. 解决android 4.0 EditText无框的烦恼
  3. [导入]Android代码优化
  4. Unknown Android Packaging Problem
  5. Android(安卓)Binder 通信机制学习(四)
  6. Error:Could not find com.android.tools
  7. android登录窗口——基础编
  8. android 单元测试之dialog测试链接整理
  9. Android选项卡(TabWidget)应用
  10. 海创软件组--20200712--Butterknife与自