2013-09-01 54 views

Trả lời

31

Đây là vấn đề tương tự như được thấy trong "How to get a Label to the right size" hoặc "Slider always has default width".

Bạn cần đặt nhãn đó vào một bảng và thêm kích thước phù hợp vào ô của bảng có nhãn.

Tiện ích con giao diện người dùng không đặt kích thước và vị trí của riêng chúng. Thay vào đó, tiện ích con sẽ đặt kích thước và vị trí của từng con. Tiện ích cung cấp kích thước tối thiểu, ưa thích và tối đa mà cha mẹ có thể sử dụng làm gợi ý. Một số tiện ích cha mẹ, chẳng hạn như Bảng, có thể được cung cấp các ràng buộc về cách định kích thước và định vị các con. Để cung cấp cho một widget một kích thước cụ thể trong một bố cục, kích thước tối thiểu, ưa thích và kích thước tối đa của widget được để lại một mình và các ràng buộc kích thước được đặt trong phụ huynh.

Nguồn: From the libgdx wiki Scene2D

Giải pháp:

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

Thay vì một Bảng tôi sử dụng [triển khai WidgetGroup này] (https://github.com/MobiDevelop/maps-editor/blob/master/maps-editor/src/com/mobidevelop/maps/editor/ui/HorizontalFlowGroup.java) (xem [câu hỏi này] (http://stackoverflow.com/questions/20303378/need-an-analog-for-inline-block-from-css-in-scene2d-ui) để giải thích tại sao tôi cần nó). Chỉ có thể bọc văn bản trong một Nhãn nằm bên trong một Bảng, hoặc có thể thực hiện bất kỳ WidgetGroup nào cung cấp chức năng đó không? – gvlasov

+1

Tôi sẽ thử vì nó được dựa trên cùng một hệ thống. Vì vậy, tôi nghĩ rằng nhóm cũng nên cung cấp các tính năng tương tự. Regualy bạn thiết lập chiều rộng của container và không phải của labele hoặc những gì bao giờ chính nó. Đó cũng là quy tắc cho các nhóm – BennX

+0

Phương pháp này không có sẵn trong trường hợp của TextButtons –

1

Nếu bạn chỉ muốn để xác định kích thước ưa thích cho một widget đơn, quấn nó với một 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

Cái gì như:

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

Hãy ghi nhớ rằng kích thước thực tế sẽ thay đổi tùy theo hệ thống phân cấp container - ví dụ, labelContainer trên sẽ hiển thị khác nhau nếu đặt trong một đối tượng bố cục khác.

Kích thước cũng sẽ thay đổi tùy thuộc vào viewport vv

0

tôi đã tìm thấy rằng mã này có thể giải quyết vấn đề mà không bất kỳ bảng hoặc gói container (cho 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);