官方指南:https://developer.android.com/guide/topics/ui/custom-components.html
方法简介
onMeasure()
用于测量视图的宽高onLayout()
用于控制子视图的位置
onMeasure
在这个方法里面测量视图的宽高然后确定视图的宽高值。这里需要注意的是,测量的是子视图的宽高,并不是自己的。
完整的方法是这样的
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
传入了两个参数,这两个参数就是父布局对当前这个View的大小的测量结果。里面包含宽高的数值和测量模式,可以用View.MeasureSpec
类去获取
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
size不用说,就是大小,单位是px。测量模式总共有三种,如下表格说明
测量模式 | 描述 |
---|---|
MeasureSpec.EXACTLY | 精确的尺寸,父布局已经给出一个明确的大小,比如设置宽高为match_parent或者50dp,都表示精确的 |
MeasureSpec.AT_MOST | 自适应,父布局会给出一个最大值,子视图自己适应大小,但不能超过最大值,比如设置宽高为w |