Android API之android.view.View.MeasureSpec
2014-02-01 18:56
316 查看
[转载自]http://www.cnblogs.com/fengzhblog/p/3175948.html
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定义的方法有:
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; }
相关文章推荐
- Android API之android.view.View.MeasureSpec
- 【Android基础】-View.MeasureSpec
- 【Android API简述】android.view.View.OnClickListener
- Android中自定义View的MeasureSpec使用
- Android中自定义View的onMeasure以及MeasureSpec使用
- Android View.MeasureSpec
- 【Android源码剖析】(API 19)[View----->MeasureSpec]
- Android中自定义View的MeasureSpec使用
- Android中自定义View的MeasureSpec使用
- Android中View内部类MeasureSpec研究
- Android中自定义View的MeasureSpec使用
- Android中自定义View的MeasureSpec使用
- 【Android源码剖析】(API 19)[View----->MeasureSpec]
- Android自定义View:MeasureSpec的真正意义与View大小控制
- Android中自定义View的MeasureSpec使用
- Android自定义View:MeasureSpec的真正意义与View大小控制
- Android中view的测量过程中,很重要的也很难理解的一个东西MeasureSpec
- Android开发之View重写相关API-onLayout,onMeasure,MeasureSpec
- 快速理解android View的测量onMeasure()与MeasureSpec
- ViewRoot,DecorView,MeasureSpec和View的工作原理——Android开发艺术探索笔记