本文主要是介绍自定义控件测量尺寸(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;
这篇关于自定义控件测量尺寸(onMeasure()方法的实现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!