如何获得给定字符串下降的高度?

时间:2012-01-19 05:52:13

标签: android

如何获得给定字符串下降的高度?

enter image description here

例如,

  • abc应返回0.
  • abcl应返回0.
  • abcp应该返回从descnder线到基线的距离。
  • abclp应该返回从descnder线到基线的距离。

到目前为止,我能做到的最好的是

private int getDecender(String string, Paint paint) {
    // Append "l", to ensure there is Ascender
    string = string + "l";
    final String stringWithoutDecender = "l";

    final Rect bounds = new Rect();
    final Rect boundsForStringWithoutDecender = new Rect();
    paint.getTextBounds(string, 0, string.length(), bounds);
    paint.getTextBounds(stringWithoutDecender, 0, stringWithoutDecender.length(), boundsForStringWithoutDecender);
    return bounds.height() - boundsForStringWithoutDecender.height();
}

然而,我的代码味道是它们不够好。有没有更好更快的方法?

2 个答案:

答案 0 :(得分:3)

其实我一直在寻找相同的功能。事实证明,有更简单的方法, 你甚至不需要单独的功能。

如果您只是在给定字符串上调用getTextBounds(),则返回的边界框将已具有该信息。

例如:

paint.getTextBounds(exampleString1 , 0, exampleString1.length(), bounds);

if (bounds.bottom > 0) Log.i("Test", "String HAS descender");
else Log.i("Test", "String DOES NOT HAVE descender");

简单地说bounds.top告诉你字符串的上升(它有负值,因为Y轴0点在字符串的基线处)和bounds.bottom告诉你字符串的下降(可以是0或具有下降的字符串的正值。

答案 1 :(得分:-1)

你应该看看Paint.FontMetrics。下降成员将为您提供“单个间隔文本的基线下方的建议距离。”。