我想知道如何以像素为单位获取字符串的宽度
答案 0 :(得分:62)
要确定String
的宽度,使用Font
并获得bounds
的{{1}},您将要绘制。
String
您也可以获得正确偏移的高度以进行绘制。只需用高度替换宽度。
此外,对于多行文本,请使用BitmapFont.getBounds(String str).width
来获取界限。
BitmapFont API已在1.5.7中更改,因此现在有另一种获取边界的方法:
完成BitmapFont.TextBounds和getBounds。相反,将字符串赋予GlyphLayout并使用其宽度和高度字段获取边界。然后,您可以通过将相同的GlyphLayout传递给BitmapFont来绘制文本,这意味着字形不必像以前那样布局两次。
示例:强>
getMultiLineBounds(someString).width
答案 1 :(得分:5)
根据@Nates回答:https://stackoverflow.com/a/20759876/619673调用方法
BitmapFont.getBounds(String str).width
并不总是返回适当的宽度!特别是当您重复使用字体时。
如果您希望绘制文本例如in the center of part of view port
,则可以使用其他方法
BitmapFont.drawWrapped(...)
示例代码:
font.drawWrapped(spriteBatch, "text", x_pos, y_pos, your_area_for_text, BitmapFont.HAlignment.CENTER);
答案 2 :(得分:0)
如果您在UI中使用皮肤,那么找到要输入GlyphLayout的正确字体会很麻烦。
在这种情况下,我使用Label的丢弃实例为我计算所有内容,然后向Label询问宽度。
Skin skin = getMySkin();
Label cellExample = new Label("888.88888", skin);
cellExample.layout();
float cellWidth = cellExample.getWidth();
Table table = new Table(skin);
table.defaults().width(cellWidth);
// fill table width cells ...
如果你想自己定位文本,这不是答案,但是使UI布局稳定并且更少依赖于单元格的实际内容是有用的。