我正在测量文本Paint.getTextBounds()
,因为我有兴趣获得要渲染的文本的高度和宽度.但是,实际呈现的文本总是比填充.width()
的Rect
信息宽一些getTextBounds()
.
令我惊讶的是,我进行了测试.measureText()
,发现它返回了一个不同的(更高)值.我试一试,发现它是正确的.
为什么他们报告不同的宽度?我怎样才能正确获得高度和宽度?我的意思是,我可以使用.measureText()
,但后来我不知道我是否应该相信.height()
返回者getTextBounds()
.
根据要求,这里是重现问题的最小代码:
final String someText = "Hello. I believe I'm some text!";
Paint p = new Paint();
Rect bounds = new Rect();
for (float f = 10; f < 40; f += 1f) {
p.setTextSize(f);
p.getTextBounds(someText, 0, someText.length(), bounds);
Log.d("Test", String.format(
"Size %f, measureText %f, getTextBounds %d",
f,
p.measureText(someText),
bounds.width())
);
}
Run Code Online (Sandbox Code Playgroud)
输出显示的差异不仅得到大于1(且没有最后一分钟的舍入误差),也似乎增加与大小(我正要吸引更多的结论,但它可能是完全的字体相关的):
D/Test ( 607): Size 10.000000, measureText 135.000000, …
Run Code Online (Sandbox Code Playgroud) 我试着在我创建的表面视图上写一些文字.它的工作正常,如果title为false,并且没有为文本添加换行符.但是,如果我添加标题并因此添加换行符,则不会按预期打印换行符,而是打印此符号[].
任何提示为什么?
@Override
public void drawObject() {
String text = "";
if (title) {
text = getGameBoard().getGame().getForeignProfile().getName() + "\n";
}
text = text + getScoreAsString();
getGameBoard().getCanvas().drawText(text, 0, text.length(), getPosition().getX(), getPosition().getY(), getPaint());
}
Run Code Online (Sandbox Code Playgroud)