2013-09-01 3 views

Antwort

31

Dies ist das gleiche Problem wie in "How to get a Label to the right size" oder "Slider always has default width".

Sie müssen dieses Etikett in eine Tabelle einfügen und die richtige Größe zu der Zelle der Tabelle hinzufügen, in der sich das Etikett befindet.

UI-Widgets legen keine eigene Größe und Position fest. Stattdessen legt das übergeordnete Widget die Größe und Position jedes untergeordneten Elements fest. Widgets bieten eine minimale, bevorzugte und maximale Größe, die der Elternteil als Hinweise verwenden kann. Bei einigen übergeordneten Widgets, z. B. Tabelle, können Einschränkungen für die Größen- und Positionsbestimmung der untergeordneten Elemente festgelegt werden. Um einem Widget eine bestimmte Größe in einem Layout zu geben, werden die minimale, bevorzugte und maximale Größe des Widgets in Ruhe gelassen und Größenbeschränkungen werden im übergeordneten Element festgelegt.

Quelle: From the libgdx wiki Scene2D

Die Lösung:

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 
+0

Anstelle einer Tabelle verwende ich [diese WidgetGroup-Implementierung] (https://github.com/MobiDevelop/maps-editor/blob/master/maps-editor/src/com/mobidevelop/maps/editor/ui/HorizontalFlowGroup.java) (siehe [diese Frage] (http://stackoverflow.com/questions/20303378/need-an-analog-for-inline-block-from-css-in-scene2d-ui) für die Erklärung, warum ich es brauche). Ist es nur möglich, Text in ein Label zu schreiben, das sich in einer Tabelle befindet, oder könnte eine WidgetGroup-Implementierung diese Funktionalität bereitstellen? – gvlasov

+1

Ich würde es versuchen, weil es auf dem gleichen System basiert. Also denke ich, dass die Gruppe auch die gleichen Funktionen bieten sollte. Regulär legen Sie die Breite des Containers fest und nicht die des Etiketts oder was auch immer. Das sollte auch die Regel für Gruppen sein. – BennX

+0

Diese Methode ist bei TextButtons nicht verfügbar –

1

Wenn Sie nur die bevorzugte Größe für ein einzelnes Widget angeben, wickeln Sie es mit einem Container.

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

Etwas wie:

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

Beachten Sie, dass die tatsächliche Größe auf der Containerhierarchie variieren wird - zum Beispiel der labelcontainer oben wird anders angezeigt, wenn platziert in einem anderen Layout-Objekt.

Die Größe auch im Darstellungs variiert je usw.

0

ich gefunden habe, dass dieser Code das Problem ohne jede Tabelle oder Packbehälter (für 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); 
lösen