2013-09-01 3 views
11

के साथ एक लेबल पाने के लिए मैं निम्नलिखित कोड की कोशिश की:libgdx कैसे लिपटे पाठ

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

और अभी तक सब मुझे मिलता है एक बहुत व्यापक लाइन है कि स्क्रीन बंद खींचता है।

उत्तर

31

यह वही समस्या है जैसा कि "How to get a Label to the right size" या "Slider always has default width" में देखा गया है।

आपको उस लेबल को एक टेबल में रखना होगा और उस तालिका के सेल में सही आकार जोड़ना होगा जहां लेबल है।

यूआई विजेट्स अपना स्वयं का आकार और स्थिति निर्धारित नहीं करते हैं। इसके बजाए, पैरेंट विजेट प्रत्येक बच्चे के आकार और स्थिति को सेट करता है। विजेट न्यूनतम, पसंदीदा और अधिकतम आकार प्रदान करते हैं जो माता-पिता संकेत के रूप में उपयोग कर सकते हैं। टेबल के रूप में कुछ अभिभावक विजेट, बच्चों को आकार और स्थिति के तरीके पर बाधाएं दी जा सकती हैं। विजेट को लेआउट में एक विशिष्ट आकार देने के लिए, विजेट का न्यूनतम, पसंदीदा, और अधिकतम आकार अकेला छोड़ दिया जाता है और माता-पिता में आकार की बाधाएं सेट की जाती हैं।

स्रोत: From the 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 
+0

तालिका के बजाय मैं [इस विजेट समूह कार्यान्वयन] का उपयोग करता हूं (https://github.com/MobiDevelop/maps-editor/blob/master/maps-editor/src/com/mobidevelop/maps/editor/ui/HorizontalFlowGroup.java) (यह प्रश्न देखें [http://stackoverflow.com/questions/20303378/need-an-analog-for-inline-block-from-css-in-scene2d-ui) स्पष्टीकरण के लिए मुझे इसकी आवश्यकता क्यों है)। क्या केवल एक लेबल में पाठ को लपेटना संभव है, या कोई विजेट समूह कार्यान्वयन उस कार्यक्षमता को प्रदान कर सकता है? – gvlasov

+1

मैं इसे आज़मा दूंगा क्योंकि यह एक ही सिस्टम पर आधारित है। तो मुझे लगता है कि समूह को भी वही सुविधाएं प्रदान करनी चाहिए। वास्तव में आप कंटेनर की चौड़ाई निर्धारित करते हैं, न कि लेबल या कभी भी। यह समूह – BennX

+0

समूहों के लिए भी नियम होना चाहिए यह विधि टेक्स्टबूटन के मामले में उपलब्ध नहीं है –

1

तुम सिर्फ एक एकल विजेट के लिए पसंदीदा आकार निर्दिष्ट एक कंटेनर के साथ लपेट चाहते हैं।

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 ऊपर अलग ढंग से प्रदर्शित करेगा रखा एक और लेआउट वस्तु में।

आकार भी व्यूपोर्ट पर निर्भर करती है, आदि

0

मैं पाया है कि इस कोड (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);