1、原理
1.1 原理综述
在Android中,文字的描述需要涉及到FontMetrics类。此类中涉及到top、ascent、descent、bottom这几个属性。这些属性具体的文字解释如下:
top:在一个大小确定的字体中,被当做最高字形,基线(base)上方的最大距离。
ascent:单行文本中,在基线(base)上方被推荐的距离。
descent:单行文本中,在基线(base)下方被推荐的距离。
bottom:在一个大小确定的字体中,被当做最低字形,基线(base)下方的最大距离。
这几个属性所对应的位置如下图所示:
所以,文字高度=descent-ascent
2、具体的方法
/**
* 测量文字的高度
* --经测试后发现,采用另一种带Rect的方式,获得的数据并不准确。
* 特别是在一些对文字有一些倾斜处理的时候
* @param paint
* @return
*/
public static float measureTextHeight(Paint paint){
float height = 0f;
if(null == paint){
return height;
}
Paint.FontMetrics fontMetrics = paint.getFontMetrics();
height = fontMetrics.descent - fontMetrics.ascent;
return height;
}
3、纠错
之前在网上也看了一些其他的方法,是采用Rect的方法来实现 测量文字的高度的,最终发现,数据并不准确。具体有问题的方法如下:
/**
* 测量文字的高度
* --经测试后发现,这一种方式在某些时候是不准确的。所以不采用
* @param paint
* @param textTemp
* @return
*/
public static float measureTextHeight2(Paint paint,String textTemp){
float height = 0f;
if(null == paint){
return height;
}
Rect rectFont = new Rect();
paint.getTextBounds(textTemp,0,textTemp.length(),rectFont);
height = rectFont.height();
return height;
}
参考地址:
http://blog.csdn.net/eyishion/article/details/51824520
http://sd4886656.iteye.com/blog/1200890