Как получить ярлык с завернутым текстом?

Я пробовал следующий код:

Label label = new Label(reallyLongString, skin);
label.setWrap(true);
label.setWidth(100); // or even as low as 10
table.add(label);
...

и все же все, что я получаю, - это очень широкая линия, которая оттягивается от экрана. Как получить ярлык с завернутым текстом?

Ответ 1

Это та же проблема, что и в слайдере, всегда имеет ширину по умолчанию или "Ползунок всегда имеет ширину по умолчанию".

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

Виджеты пользовательского интерфейса не устанавливают свой собственный размер и положение. Вместо этого родительский виджет устанавливает размер и положение каждого дочернего элемента. Виджеты предоставляют минимальный, предпочтительный и максимальный размер, который родитель может использовать в качестве подсказок. Некоторым родительским виджетам, таким как Таблица, могут быть даны ограничения относительно размера и расположения дочерних элементов. Чтобы придать виджету определенный размер в макете, минимальный, предпочтительный и максимальный размер виджета оставляются в покое, а ограничения размера устанавливаются в родительском элементе.

Источник: из вики libgdx Scene2D

Решение:

Label label = new Label(reallyLongString, skin);
label.setWrap(true);
label.setWidth(100); // or even as low as 10
table.add(label).width(10f);// <--- here you define the width

Ответ 2

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

https://github.com/libgdx/libgdx/wiki/Scene2d.ui#layout-widgets

https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/ui/Container.html

Что-то вроде:

Container<Label> labelContainer = new Container(myLabel);
labelContainer.prefWidth(200.0f);

Имейте в виду, что фактический размер будет варьироваться в зависимости от иерархии контейнеров - например, приведенный выше класс labelContainer будет отображаться по-разному, если он помещен в другой объект макета.

Размер будет также изменяться в зависимости от области просмотра и т.д.

Ответ 3

Я обнаружил, что следующий код может решить проблему без какой-либо таблицы или упаковочного контейнера (для libgdx-1.9.6):

label = new Label("Some label", skin);
label.setPosition(600, 50);
label.setWidth(200);
label.setHeight(50);
label.setWrap(true);
stage.addActor(label);