自定义View:Measure进程说明之MeasureSpec类详细讲授
MeasureSpec类是Android中用于丈量View的尺寸的一个工具类。在自定义View中,我们需要重写onMeasure方法来肯定View的尺寸,而MeasureSpec类就是用来帮助我们完成这个进程的。
MeasureSpec类包括了一个32位的int值,其中高2位表示丈量模式(MeasureSpec的模式有三种:UNSPECIFIED、EXACTLY、AT_MOST),低30位表示尺寸大小。
在View的丈量进程中,MeasureSpec类的作用主要有两个方面:
1. 解析父容器传递给子View的MeasureSpec,得到丈量模式和尺寸大小;
2. 根据丈量模式和子View的期望尺寸,计算出子View的丈量尺寸。
解析MeasureSpec的方法有两个:getMode(int measureSpec)和getSize(int measureSpec)。其中getMode方法用于获得丈量模式,getSize方法用于获得尺寸大小。
1. getMode方法:
getMode方法的作用是获得MeasureSpec中的丈量模式。丈量模式有三种:
- UNSPECIFIED(未指定模式):父容器对子View没有任何限制,子View可以任意大小;
- EXACTLY(精确模式):父容器指定了子View的确切尺寸,子View的大小一定要和MeasureSpec中的尺寸大小一致;
- AT_MOST(最大模式):父容器指定了子View的最大尺寸,子View的大小不能超过MeasureSpec中的尺寸大小。
2. getSize方法:
getSize方法的作用是获得MeasureSpec中的尺寸大小。尺寸大小是一个具体的数值,表示了View的期望尺寸。
在自定义View中,我们通常会根据丈量模式和尺寸大小来计算View的丈量尺寸。计算丈量尺寸的方法有两个:resolveSize(int size, int measureSpec)和resolveSizeAndState(int size, int measureSpec, int childMeasuredState)。其中resolveSize方法用于计算丈量尺寸,resolveSizeAndState方法除计算丈量尺寸外,还可以保存子View的状态。
1. resolveSize方法:
resolveSize方法的作用是根据丈量模式和尺寸大小,计算出View的丈量尺寸。计算的规则以下:
- 如果丈量模式是EXACTLY,直接返回尺寸大小;
- 如果丈量模式是AT_MOST,返回尺寸大小和MeasureSpec中的尺寸大小的较小值;
- 如果丈量模式是UNSPECIFIED,返回尺寸大小。
2. resolveSizeAndState方法:
resolveSizeAndState方法的作用和resolveSize方法类似,只是它还可以保存子View的状态。子View的状态是一个32位的int值,其中高2位表示丈量状态(子View的丈量状态有三种:MEASURED_STATE_TOO_SMALL、MEASURED_STATE_MASK、MEASURED_STATE_SHIFT),低30位表示尺寸大小。
在自定义View中,我们通常会使用resolveSizeAndState方法来计算丈量尺寸,并保存子View的状态。
综上所述,MeasureSpec类是用于丈量View尺寸的一个工具类,通过解析MeasureSpec来获得丈量模式和尺寸大小,并根据丈量模式和尺寸大小计算View的丈量尺寸。在自定义View中,我们可使用MeasureSpec类来完成View的丈量进程。
TOP