简介
MeasureSpec 顾名思义,就是测量规范的意思。这个测量规范是自定义view或View Group时,父布局给子布局的测量规范,用于告诉子布局可以在哪些范围内展示,会在onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int)方法中传入
Android中有3中测量规范
名称 | 作用 |
---|---|
MeasureSpec.UNSPECIFIED | 不对View大小做限制,一般系统使用 |
MeasureSpec.EXACTLY | 确切的大小,如100dp |
MeasureSpec.AT_MOST | 大小不可超过某数值,如machParent,最大不能超过父布局大小 |
测量规范是一个Int32的值表示,由于int是32位的,用高两位表示mode,低30位 表示具体的大小。
相关方法
-
获取测量的模式
int mode = MeasureSpec.getMode(measureSpec);
-
获取测量的大小
int size = MeasureSpec.getSize(measureSpec);
-
保存测量的大小,在自定义View或者ViewGroup时,在onMeasure方法中,必须调用这个方法来保存测量的后的大小
setMeasuredDimension(int measuredWidth, int measuredHeight)
-
获取View的大小getMeasureWidth和getWidth
getMeasureWidth :在measure()过程结束后就可以获取到对应的值,通过setMeasuredDimension()方法来设置的
getWidth:在layout()过程结束后才能获取到,通过视图右边的坐标减去左边的坐标计算出来的
坐标系
自定义View的话,使用的是视图坐标系