如何在Libgdx中获得字符串宽度?

如何在Libgdx中获得字符串宽度?,libgdx,width,Libgdx,Width,我想知道如何以像素为单位获取字符串的宽度 要测量字符串的宽度,请使用字体并获得字符串的边界,您需要绘制 BitmapFont.getBounds(String str).width 您也可以获得绘制的正确偏移的高度。用高度代替宽度 此外,对于多行文本,使用getmultilebounds(someString).width获取边界 BitmapFont API>=1.5.6 BitmapFont API在1.5.7中更改了,因此现在有一种不同的方法来获取边界: BitmapFont.Tex

我想知道如何以像素为单位获取字符串的宽度 要测量
字符串的宽度
,请使用
字体
并获得
字符串
边界,您需要绘制

BitmapFont.getBounds(String str).width

您也可以获得绘制的正确偏移的高度。用高度代替宽度

此外,对于多行文本,使用
getmultilebounds(someString).width
获取边界


BitmapFont API>=1.5.6 BitmapFont API在1.5.7中更改了,因此现在有一种不同的方法来获取边界:

BitmapFont.TextBounds和getBounds已完成。相反,将字符串指定给GlyphLayout,并使用其宽度和高度字段获取边界。然后,您可以通过将相同的GlyphLayout传递给BitmapFont来绘制文本,这意味着这些Glyph不必像以前那样进行两次布局

()

示例:

GlyphLayout layout = new GlyphLayout(); //dont do this every frame! Store it as member
layout.setText("meow");
float width = layout.width;// contains the width of the current set text
float height = layout.height; // contains the height of the current set text

根据@Nates答案:调用方法

BitmapFont.getBounds(String str).width
不总是返回正确的宽度!尤其是当你重复使用字体的时候。 如果要在视口部分的中心绘制文本,例如
,可以使用其他方法避免此问题

BitmapFont.drawWrapped(…)

示例代码:

 font.drawWrapped(spriteBatch, "text", x_pos, y_pos, your_area_for_text, BitmapFont.HAlignment.CENTER);

如果您在UI中使用皮肤,那么找到要输入到Glyph布局中的正确字体是一件麻烦事

在本例中,我使用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布局稳定并减少对单元格实际内容的依赖性非常有用。

这计算布局的字体是什么?您可以自己指定。在GlyphLayout上使用方法
setText(位图字体,字符序列str)
。@BennX我使用了GlyphLayout.setText(位图字体,字符序列str)。我找不到glyphLayout.setText(CharSequence str)