Libgdx: Is there an easy way to center text on each axis on a button?

Sean Heiss picture Sean Heiss · Jan 11, 2013 · Viewed 21.7k times · Source

I have been trying to figure out a way to center text on a button, but can't find an easy, multi-purpose way to. I can do it, but it will only work for a certain string, not for any string. i would like to know if there is a way to center any string on a button. My button in this case is 185x50.

I have been able to center this button on the screen, like so:

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

Any help would be much appreciated. :)

Answer

Pinkie Swirl picture Pinkie Swirl · Jan 12, 2013

Updated the answer to libgdx version 1.7.1-SNAPSHOT:

The easiest way to do this, is to use the TextButton class from libgdx. The text from a TextButton is centered by default. This still works!

Updated example:

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);

Outdated example:

This no longer works!

If you do not want to use it, you can get the font width and height with:

    font.getBounds("Test text");

So you can do something like this:

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