Android 我怎样才能真正将文本水平居中?

Android 我怎样才能真正将文本水平居中?,android,fonts,alignment,Android,Fonts,Alignment,我有一个钢琴应用程序,上面有一些圆形标签和音符名称。 这些注释名称需要在标签上完全居中。 我最终通过上升和下降找到了垂直方向的方法。然而,我仍然没有得到完美的水平对齐 它主要是关于单个字符的渲染。不管我做什么,有些角色都不在。有点小,但它在那里 注意,例如,E稍微向右偏移,B稍微向左偏移 我在onDraw()中呈现标签,而不是使用自定义视图。我还尝试使用TextView查看标签的大小,并使用Gravity.CENTER,但结果相同。还请注意,我也尝试了对齐.Center 代码: 绘制框的宽度

我有一个钢琴应用程序,上面有一些圆形标签和音符名称。 这些注释名称需要在标签上完全居中。 我最终通过
上升
下降
找到了垂直方向的方法。然而,我仍然没有得到完美的水平对齐

它主要是关于单个字符的渲染。不管我做什么,有些角色都不在。有点小,但它在那里

注意,例如,E稍微向右偏移,B稍微向左偏移

我在
onDraw()
中呈现标签,而不是使用自定义视图。我还尝试使用
TextView
查看标签的大小,并使用
Gravity.CENTER
,但结果相同。还请注意,我也尝试了对齐.Center

代码:

绘制框的宽度是
measureText
的结果。在
E
字符处,您可以看到它不知何故测量了左侧的一些空白,使字符向右偏移

这是使用Android 4.0.3上的标准字体。使用自定义TTF字体会导致相同类型的问题,但每个字符的问题不同


我想知道我还能做什么?(除了克服它;)

使用“中心对齐”只需更改画布。drawText(infoText, circleX-(0.5F*textWidth),…到canvas.drawText(infoText,
circleX,

是的,我也这样做了。它给出了相同的结果。只是为了测试,请尝试更长的文本,例如“eeeee”而不是“e”,并尝试带宽度和不带宽度*0.5
usedPaint.setTextAlign(Align.LEFT); //Also tried it with Center
Rect textBounds = new Rect();
usedPaint.getTextBounds(infoText, 0, infoText.length(), textBounds);
float textWidth = usedPaint.measureText(infoText);
canvas.drawText(infoText, circleX - (0.5F * textWidth),  circleY - ((usedPaint.descent() + usedPaint.ascent())/2),
                usedPaint);
canvas.drawRect((circleX - (0.5F* textWidth)), circleY - (0.5F * textBounds.height()), circleX + (0.5F * textWidth), circleY + (0.5F * textBounds.height()), otherPaint);