确定字符串/字体尺寸

时间:2010-07-05 09:37:18

标签: android

我有一个传递文本字符串的方法。对于指定的字体和大小,它会计算出文本的边界框,然后绘制一个包含它的圆角。

我试图将所有这些舍入保持相同的高度(不管字体中的上升和下降),因此基本的getTextBounds不足以限制传递的特定文本。

我提出的解决方案是使用getTextBounds计算文本的宽度,并从FontMetricsInt上升/下降以计算出高度:

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTextSize(fontsize);
paint.setTypeface(Typeface.SANS_SERIF);
Rect textBounds = new Rect();
paint.getTextBounds(value, 0, value.length(), textBounds);
FontMetricsInt fm = paint.getFontMetricsInt();
this.width = textBounds.width();
this.height = fm.descent - fm.ascent;
this.textAscent = fm.ascent;

有更简单的方法吗?

编辑:最后想出了如何正确格式化代码!

2 个答案:

答案 0 :(得分:3)

为什么不使用如下的直接函数:paint.measureText(value),paint.ascent(),paint.descent()?代码是:

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTextSize(fontsize);
paint.setTypeface(Typeface.SANS_SERIF);
this.width = paint.measureText(value);
this.height = paint.descent() - paint.ascent();
this.textAscent = paint.ascent();

不是一个很大的改进,但更容易阅读。

答案 1 :(得分:2)

您无需从ascent()中减去descent()。您可以使用Paint.getFontSpacing()

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTextSize(fontsize);
paint.setTypeface(Typeface.SANS_SERIF);
this.width = paint.measureText(value);
this.height = paint.getFontSpacing();
this.textAscent = paint.ascent();