Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

java

libgdx

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. :)

like image 616
Sean Heiss Avatar asked Jan 11 '13 04:01

Sean Heiss


People also ask

How do I center text in Libgdx?

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!

How do you center text?

Select the text that you want to center. On the Home tab, in the Paragraph group, click Center .


2 Answers

For the newer version of libgdx the function BitMapFont.getBounds() isn't there in api anymore. You can use GlyphLayout to get bounds.For example,

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);
like image 34
bytestorm Avatar answered Oct 17 '22 04:10

bytestorm


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;
like image 165
Pinkie Swirl Avatar answered Oct 17 '22 06:10

Pinkie Swirl