如何获得给定字符串下降的高度?
例如,
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();
}
然而,我的代码味道是它们不够好。有没有更好更快的方法?
答案 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。下降成员将为您提供“单个间隔文本的基线下方的建议距离。”。