27

我想知道如何以像素为单位获取字符串的宽度

4

3 回答 3

71

位图字体 API < 1.5.6

String为了测量您使用的 a 的宽度Font并获得 的boundsString您将要绘制。

BitmapFont.getBounds(String str).width

位图字体 API

您也可以获得正确偏移的高度以进行绘图。只需将宽度替换为高度。

此外,对于多行文本,还可以使用getMultiLineBounds(someString).width来获取边界。


位图字体 API >= 1.5.6

BitmapFont API 在 1.5.7 中发生了变化,因此现在有一种不同的方式来获取边界:

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

来源网络档案

例子:

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
于 2013-05-17T10:16:03.410 回答
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);
于 2014-04-17T07:17:16.367 回答
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 布局稳定并减少对单元格实际内容的依赖。

于 2015-06-27T12:01:04.833 回答