如何获取带换行文本的标签?

16

我已经尝试了以下代码:

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

然而我得到的仅是一条很宽的线,它延伸到了屏幕外。如何获得换行文本的标签?

3个回答

35

这与slider always has default width"Slider always has default width"中所见的问题相同。

您需要将标签放入表格中,并在包含标签的单元格中添加正确的大小。

UI小部件不会自行设置其大小和位置。相反,父级小部件设置每个子级的大小和位置。小部件提供可作为提示的最小、首选和最大大小。某些父级小部件(如表格)可以获得有关如何调整大小和定位子项的约束条件。要在布局中给小部件指定特定大小,保留小部件的最小、首选和最大大小,并在父级中设置大小约束。

来源:来自libgdx wiki 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

我使用此WidgetGroup实现(请参见此问题以了解为什么需要它)代替表格。在一个Label中包装文本只能在Table中进行吗?还是任何WidgetGroup实现都可以提供该功能? - gvlasov
1
我会尝试一下,因为它基于相同的系统。所以我认为该组也应该提供相同的功能。通常您设置容器的宽度而不是标签或其他元素本身的宽度。这也应该是组的规则。 - bemeyer
在 TextButtons 的情况下,此方法不可用。 - salih kallai

4

我发现以下代码可以解决问题,无需任何表格或包装容器(适用于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);

2
如果您只想为单个小部件指定首选大小,请将其包装在一个容器中。更多信息请参见:https://github.com/libgdx/libgdx/wiki/Scene2d.ui#layout-widgets。您还可以查看Container类的API文档: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将显示不同。

大小还会根据视口等因素而变化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接