onMeasure
可以在视图中重写 onMeasure 方法计算该视图的精确的宽高,其中父容器会给定参考的宽高以及快高的模式
获取模式:
// 获取宽的模式
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
switch (widthMode){
case MeasureSpec.EXACTLY:
// 精确的值 math_parent 100dp 20dp
break;
case MeasureSpec.AT_MOST:
// 有一个最大的参考值,建议不要超过该值 , 像 wrap_content
break;
case MeasureSpec.UNSPECIFIED:
// 未指定,一般开发者不要使用
break;
}
获取尺寸 ( 像素 )
// 尺寸
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
设置精确的宽高
setMeasuredDimension(widthSize,heightSize);
如:宽度如果是 wrap_content 那么用 个像素,高度如果是 wrap_content 则用 个像素
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// 获取宽的模式
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
// 尺寸
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
if(widthMode == MeasureSpec.AT_MOST){
widthSize = ;
}
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
if(heightMode == MeasureSpec.AT_MOST){
heightSize = ;
}
setMeasuredDimension(widthSize,heightSize);
}