Высота многострочной текстовой метки Libgdx

Я сделал небольшой тест на LibGdx, на многострочной этикетке, кажется, что я не могу получить высоту обернутой линии. Ниже приведен код. Теоретически, высота для aLebel должна быть> bLabel. Но результат выглядит одинаково.

код:

aLabel.setText("this is a super long long long text that need wrapping."); // line wrapped into 3 lines aLabel.setWrap(true); aLabel.setWidth(470); doLog("aLabel.getHeight(): " + aLabel.getHeight()); bLabel.setText("this is short."); // unwrapped line bLabel.setWrap(true); bLabel.setWidth(470); doLog("bLabel.getHeight(): " + bLabel.getHeight()); 

результат:

 aLabel.getHeight(): 45.0 bLabel.getHeight(): 45.0 

Кто-нибудь знает, как получить фактическую многострочную высоту в LibGdx? Заранее спасибо.

У меня была эта проблема в течение многих лет и она была случайно решена путем установки ширины и упаковки этикетки дважды. Обратите внимание, что многострочные метки никогда не собирались определять свою собственную ширину, поэтому вам нужно установить их извне, предпочтительно из родителя.

 public Label createLabel() { // Create label and set wrap Label label = new Label("Some long string here...", skin); label.setWrap(true); // Pack label label.pack(); // This might not be necessary, unless you're changing other attributes such as font scale. // Manual sizing label.setWidth(textWidth); // Set the width directly label.pack(); // Label calculates it's height here, but resets width to 0 (bug?) label.setWidth(textWidth); // Set width again return label; } 

Версия LibGDX: 1.6.4

У меня была такая же проблема, и, похоже, в классе Label не существует метода для решения этой проблемы. Кроме того, я согласен с тобой, метод getHeight () должен возвращать реальную высоту Актера, поэтому я не знаю, является ли это ошибкой или есть аргументы в пользу такого поведения.

В любом случае, как я решил проблему, это использование метода getWrappedBounds BitmapFont. Это не коротко, но для вашего примера это будет следующим:

 doLog("aLabel.getHeight(): " + aLabel.getStyle().font.getWrappedBounds(aLabel.getText(), aLabel.getWidth()).height); 

Это можно сделать, добавив ограничение на ячейку, которая содержит метку в таблице:

 Label label = new Label("Example", new Label.LabelStyle(font, Color.WHITE)); label.setWrap(true); Table table = new Table(); table.add(label).width(WITH); 

Для получения дополнительной информации о том, как использовать таблицу, перейдите по адресу : https://github.com/libgdx/libgdx/wiki/Table

Упаковывает размер виджета в его размер pref, не более того. Ширина ширины метки с оберткой равна 0.

 Label label = new Label(...); label.setWrap(true); label.setWidth(123); label.setHeight(label.getPrefHeight());