2013-09-01 12 views

risposta

31

Questo è lo stesso problema riscontrato in "How to get a Label to the right size" o "Slider always has default width".

È necessario inserire tale etichetta in una tabella e aggiungere la dimensione corretta alla cella del tavolo in cui si trova l'etichetta.

I widget UI non impostano la propria dimensione e posizione. Invece, il widget genitore imposta la dimensione e la posizione di ogni bambino. I widget forniscono una dimensione minima, preferita e massima che il genitore può utilizzare come suggerimenti. Alcuni widget parent, come Table, possono avere vincoli su come dimensionare e posizionare i bambini. Per assegnare a un widget una dimensione specifica in un layout, le dimensioni minime, preferite e massime del widget vengono lasciate sole e i vincoli di dimensione sono impostati nel genitore.

Fonte: From the libgdx wiki Scene2D

La soluzione:

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

Invece di una tabella, utilizzo [questa implementazione WidgetGroup] (https://github.com/MobiDevelop/maps-editor/blob/master/maps-editor/src/com/mobidevelop/maps/editor/ui/HorizontalFlowGroup.java) (vedi [questa domanda] (http://stackoverflow.com/questions/20303378/need-an-analog-for-inline-block-from-css-in-scene2d-ui) per la spiegazione del perché ne ho bisogno). È possibile solo racchiudere il testo in un'etichetta che si trova all'interno di una tabella oppure è possibile che qualsiasi implementazione di WidgetGroup fornisca tale funzionalità? – gvlasov

+1

Ci proverei perché è basato sullo stesso sistema. Quindi penso che il gruppo dovrebbe anche fornire le stesse caratteristiche. Regolarmente si imposta la larghezza del contenitore e non della labele o cosa mai stessa. Questa dovrebbe essere la regola per i gruppi – BennX

+0

Questo metodo non è disponibile nel caso di TextButtons –

1

Se si desidera solo per specificare la dimensione preferita per un singolo widget di, avvolgerlo con un contenitore.

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

Qualcosa di simile:

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

Tenete a mente che la dimensione effettiva può variare a seconda della gerarchia contenitore - per esempio, il labelContainer sopra verrà visualizzato in modo diverso se posta in un altro oggetto di layout.

La dimensione varierà anche a seconda della finestra, ecc

0

ho trovato che questo codice può risolvere il problema senza qualsiasi contenitore tabella o incarto (per 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); 
Problemi correlati