onMeasure方法用于测量尺寸,在该方法中可以设置控件本身或其子控件的宽高。
1.测量模式
Android的视图提供了三种测量模式:
(1)MeasureSpec.AT_MOST 达到最大值,即match_parent。
(2)MeasureSpec.UNSPECIFIED 未指定(实际就是自适应),即wrap_content。
(3)MeasureSpec.EXACTLY 精确尺寸,即具体dp值。
2.获取测量模式
MeasureSpec.getMode( int widthMeasureSpec )
3.获取实际大小
MeasureSpec.getSize( int widthMeasureSpec )
//例
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//获取测量模式
int widthMode=MeasureSpec.getMode(widthMeasureSpec);
//判断模式
if(widthMode==MeasureSpec.EXACTLY){
//模式为具体dp值
//获取实际宽度
int widthSize=MeasureSpec.getSize(widthMeasureSpec);
Log.d("OK","设定值,实际宽度:"+widthSize);
}
else if(widthMode==MeasureSpec.UNSPECIFIED){
//模式为未指定(自适应),wrap_content
//获取实际宽度
int widthSize=MeasureSpec.getSize(widthMeasureSpec);
Log.d("OK","自适应,实际宽度:"+widthSize);
}
else if (widthMode==MeasureSpec.AT_MOST) {
//模式为达到最大值,match_parent
//获取实际宽度
int widthSize=MeasureSpec.getSize(widthMeasureSpec);
Log.d("OK","最大值,实际宽度:"+widthSize);
}
}
4.测量文本大小
(1)测量文本宽度
//创建一个Paint(画笔)对象
Paint paint=new Paint();
//设置画笔的文本大小
paint.setTextSize(textSize);
//测量文本宽度
paint.measureText(text);
(2)测量文本高度
使用FontMetrics类
FontMetrics类的距离属性:
top 行的顶部与基线的距离。
ascent 字符的顶部与基线的距离。
descent 字符的底部与基线的距离。
bottom 行的底部与基线的距离。
leading 行间距。
//创建一个Paint(画笔)对象
Paint paint=new Paint();
//设置画笔的文本大小
paint.setTextSize(textSize);
//获取FontMetrics对象
Paint.FontMetrics fm=paint.getFontMetrics();
//文本高度
float h=fm.descent-fm.ascent;