Java Libgdx:有没有一种简单的方法可以让文本在按钮的每个轴上居中?

Java Libgdx:有没有一种简单的方法可以让文本在按钮的每个轴上居中?,java,libgdx,Java,Libgdx,我一直在试图找到一种将文本置于按钮中心的方法,但找不到一种简单、多用途的方法。我可以这样做,但它只适用于某个字符串,而不适用于任何字符串。我想知道是否有一种方法可以将任何字符串置于按钮的中心。我在这个箱子里的按钮是185x50 我已经能够在屏幕上居中显示此按钮,如下所示: buttonX = WIDTH / 2 - (screen.getRegionWidth() / 2); buttonY = HEIGHT / 2 - (screen.getRegionHeight() / 2); 任何帮助

我一直在试图找到一种将文本置于按钮中心的方法,但找不到一种简单、多用途的方法。我可以这样做,但它只适用于某个字符串,而不适用于任何字符串。我想知道是否有一种方法可以将任何字符串置于按钮的中心。我在这个箱子里的按钮是185x50

我已经能够在屏幕上居中显示此按钮,如下所示:

buttonX = WIDTH / 2 - (screen.getRegionWidth() / 2);
buttonY = HEIGHT / 2 - (screen.getRegionHeight() / 2);

任何帮助都将不胜感激。:)

更新了libgdx版本1.7.1-SNAPSHOT的答案:

最简单的方法是使用libgdx中的TextButton类。默认情况下,文本按钮中的文本居中。这仍然有效

更新示例:

final BitmapFont font = new BitmapFont();

final String text = "Test";

final GlyphLayout layout = new GlyphLayout(font, text);
// or for non final texts: layout.setText(font, text);

final float fontX = objectX + (objectWidth - layout.width) / 2;
final float fontY = objectY + (objectHeight + layout.height) / 2;

font.draw(batch, layout, fontX, fontY);
过时的例子:

final BitmapFont font = new BitmapFont();

final String text = "Test";

final GlyphLayout layout = new GlyphLayout(font, text);
// or for non final texts: layout.setText(font, text);

final float fontX = objectX + (objectWidth - layout.width) / 2;
final float fontY = objectY + (objectHeight + layout.height) / 2;

font.draw(batch, layout, fontX, fontY);
这不再有效

如果您不想使用它,可以通过以下方法获得字体宽度和高度:

    font.getBounds("Test text");
所以你可以这样做:

    String fontText = "";
    fontX = buttonX + buttonWidth/2 - font.getBounds(fontText).width/2;
    fontY = buttonY + buttonHeight/2 + font.getBounds(fontText).height/2;

对于较新版本的libgdx,函数BitMapFont.getBounds()不再存在于api中。您可以使用GlyphLayout获取边界。例如

BitmapFont font;
SpriteBatch spriteBatch;
//... Load any font of your choice first
FreeTypeFontGenerator fontGenerator = new FreeTypeFontGenerator(
   Gdx.files.internal("myFont.ttf")
);
FreeTypeFontGenerator.FreeTypeFontParameter freeTypeFontParameter =
      new FreeTypeFontGenerator.FreeTypeFontParameter();
freeTypeFontParameter.size = size;
fontGenerator.generateData(freeTypeFontParameter);
font = fontGenerator.generateFont(freeTypeFontParameter);

//Initialize the spriteBatch as requirement

GlyphLayout glyphLayout = new GlyphLayout();
String item = "Example";
glyphLayout.setText(font,item);
float w = glyphLayout.width;
font.draw(spriteBatch, glyphLayout, (Game.SCREEN_WIDTH - w)/2, y);
请尝试以下操作:

label.setPosition(Gdx.graphics.getWidth()/2-(label.getPrefWidth()/2),Gdx.graphics.getHeight()-(label.getPrefHeight()/2));

您正在使用libGDX Stage UI“按钮”吗?或者你自己的按钮类?为了增加这个答案,你可以通过从游戏的宽度中减去文本的宽度并除以2来轻松居中
fontX=(gameWidth-font.getBounds(fontText.width)/2
我认为他们更改了它,因为我在中找不到它api@AlexKapustian您可以使用glyphlayout(在较新版本的libgdx中)来实现这一目的。为什么要担心文本任意居中?只需使用TextButton即可。它会自动将文本居中Pinkie Whirl提到的文本按钮没有使用
stage
就无法启动。很高兴看到使用了
setText
而不是不必要的实例化。