View中MeasureSpec的作用
来源:互联网 发布:开票软件为什么打不开 编辑:程序博客网 时间:2024/05/25 08:11
一个MeasureSpec封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽度和高度的要求。一个MeasureSpec由大小和模式组成。它有三种模式:UNSPECIFIED(未指定),父元素部队自元素施加任何束缚,子元素可以得到任意想要的大小;EXACTLY(完全),父元素决定自元素的确切大小,子元素将被限定在给定的边界里而忽略它本身大小;AT_MOST(至多),子元素至多达到指定大小的值。
常用的三个函数:
1.static int getMode(int measureSpec):根据提供的测量值(格式)提取模式(上述三个模式之一)
2.static int getSize(int measureSpec):根据提供的测量值(格式)提取大小值(这个大小也就是我们通常所说的大小)
MeasureSpec本身是一个32位的int值, 但是却表示了两种信息.
高2位: 代表了SpecMode, 测量模式
常用的三个函数:
1.static int getMode(int measureSpec):根据提供的测量值(格式)提取模式(上述三个模式之一)
2.static int getSize(int measureSpec):根据提供的测量值(格式)提取大小值(这个大小也就是我们通常所说的大小)
3.static int makeMeasureSpec(int size,int mode):根据提供的大小值和模式创建一个测量值(格式)
可以看到这里:
a、根据大小(size)和模式(mode)生成一个测量规格;
b、根据测量规格(MeasureSpec)获取大小(size)和模式(mode)
MeasureSpec本身是一个32位的int值, 但是却表示了两种信息.
高2位: 代表了SpecMode, 测量模式
低30位: 代表了SpecSize, 在上述测量模式中的大小
public static class 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; public static int makeMeasureSpec(int size, int mode) { if (sUseBrokenMakeMeasureSpec) { return size + mode; } else { return (size & ~MODE_MASK) | (mode & MODE_MASK); } } public static int makeSafeMeasureSpec(int size, int mode) { if (sUseZeroUnspecifiedMeasureSpec && mode == UNSPECIFIED) { return 0; } return makeMeasureSpec(size, mode); } public static int getMode(int measureSpec) { return (measureSpec & MODE_MASK); } public static int getSize(int measureSpec) { return (measureSpec & ~MODE_MASK); } .....}
这里高两位的值为2代表的是AT_MOST模式,为1代表的是EXACTLY模式,为0则代表UNSPECIFIED模式。
参考:
http://szysky.com/2016/08/10/%E3%80%8AAndroid%E5%BC%80%E5%8F%91%E8%89%BA%E6%9C%AF%E6%8E%A2%E7%B4%A2%E3%80%8B04-View%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86/
http://www.cnblogs.com/slider/archive/2011/11/28/2266538.html
http://yongyu.itscoder.com/2016/09/11/view_measure/
0 0
- View中MeasureSpec的作用
- Android 自定义View 测量控件大小onMeasure中MeasureSpec作用
- Android中自定义View的MeasureSpec使用
- Android中自定义View的MeasureSpec使用
- Android中自定义View的MeasureSpec使用
- Android中自定义View的MeasureSpec使用
- Android中自定义View的MeasureSpec使用
- Android中自定义View的MeasureSpec使用
- Android中自定义View的MeasureSpec使用
- Android中自定义View的MeasureSpec使用
- Android中自定义View的MeasureSpec使用
- Android中自定义View的MeasureSpec使用
- 关于 MeasureSpec,view中measure 的整理
- Android中自定义View的MeasureSpec使用
- Android中自定义View的MeasureSpec使用
- Android中自定义View的MeasureSpec使用
- Android中自定义View的MeasureSpec使用
- Android中自定义View的MeasureSpec使用
- EXTjs入门大全
- KMP算法详解
- PostgreSQL 百亿数据 秒级响应 正则及模糊查询
- 自定义的广告轮播 --(三)(无限循环)
- ganglia安装与启动
- View中MeasureSpec的作用
- 1.ssm框架springmvc拦截"/"后资源文件找不到问题
- Android Studio教程
- 整理的Java资源大全
- Mac osx 10.10 苹果机上用DD制作Ubuntu的USB启动盘
- spring aop 简单实例
- HDU 1556 Color the ball (只做区间更新)
- 微信支付
- C语言中双感叹号(!!)的含义