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);
}