①初步明白Rect
Rect.width(),这个方法是获取控件中内容的宽度,height()获取控件内容的高度;
②当xml文件中的宽高设为wrap_content时,要自己,获取内容的宽高,来计算背景的宽度和高度,我们需要自己进行测量控件大小时,即重写onMesure方法”:
MeasureSpec的specMode,一共三种类型:
EXACTLY:一般是设置了明确的值或者是MATCH_PARENT
AT_MOST:表示子布局限制在一个最大值内,一般为WRAP_CONTENT
UNSPECIFIED:表示子布局想要多大就多大,很少使用
获取方法:
int specMode = MeasureSpec.getMode(widthMeasureSpec);
int specSize = MeasureSpec.getSize(widthMeasureSpec);
specMode = MeasureSpec.getMode(heightMeasureSpec);
specSize = MeasureSpec.getSize(heightMeasureSpec);
specMode 是得到xml文件中宽高使用的是WRAP_CONTENT还是MATCH_PARENT,
specSize 得到布局的宽高,
有一个奇怪的现象,还没明白,当使用WRAP_CONTENT时
switch (specMode)
{
case MeasureSpec.EXACTLY:
width = getPaddingLeft() + getPaddingRight() + specSize;
Log.d("CustomTextView","specSize() "+specSize);
// Log.d("CustomTextView"," mRect.width()()"+ mRect.width());
break;
case MeasureSpec.AT_MOST:
width = getPaddingLeft() + getPaddingRight() + mRect.width();
// Log.d("CustomTextView"," mRect.width()()"+ mRect.width());
Log.d("CustomTextView","specSize()2 "+specSize);
break;
}
打印的结果是这样的,MeasureSpec.EXACTLY中的specSize为318是内容的宽度,MeasureSpec.AT_MOST中打印的却是布局的宽度,不太明白,有哪位大神看了,希望给我解惑。
xml文件中使用MATCH_PARENT时,specSize的值都是一样的,
//设置宽高
setMeasuredDimension(width, height);