Мне интересно узнать, как получить ширину моей строки в пикселях
Как получить ширину строки в Libgdx?
Ответ 1
BitmapFont API < 1.5.6
Чтобы измерить ширину a String
, вы используете свой Font
и получите bounds
String
, вы собираетесь рисовать.
BitmapFont.getBounds(String str).width
Вы можете получить высоту для правильного смещения для рисования. Просто замените ширину на высоту.
Кроме того, для многострочных текстов используйте getMultiLineBounds(someString).width
для получения границ.
BitmapFont API >= 1.5.6
API BitmapFont изменен в 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
Ответ 2
По ответам @Nates: fooobar.com/questions/237722/... метод вызова
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);
Ответ 3
Если вы используете скины в пользовательском интерфейсе, вам сложно найти правильный шрифт для подачи в GlyphLayout.
В этом случае я использую экземпляр ярлыка для выброса, чтобы все выяснить для меня, затем спросите ярлык о ширине.
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 ...
Это не ответ, если вы хотите разместить текст самостоятельно, но полезно сделать компоновку пользовательского интерфейса стабильной и менее зависимой от фактического содержимого ячеек.