2013-06-12 3 views
5

У меня возникли проблемы с настройкой прокладки или чем-то подобным актеру. Не могу понять путь. Думаю, что я должен что-то добавить в коже?Libgdx Scene2d - добавление дополнений актера (TextField)?

У меня есть этот TextField:

 textboxskin = new Skin(); 
     textboxskin.add("textfieldback", new Texture("data/textfieldback.png")); 
     textboxskin.add("cursor", new Texture("data/cursortextfield.png")); 
     textboxskin.add("selection", new Texture("data/selection.png")); 
     textboxskin.add("font", font); 

     TextFieldStyle textfieldstyle = new TextFieldStyle(); 
     textfieldstyle.background= textboxskin.getDrawable("textfieldback"); 
     textfieldstyle.disabledFontColor=Color.BLACK; 
     textfieldstyle.font=textboxskin.getFont("font"); 
     textfieldstyle.fontColor=Color.WHITE; 
     textfieldstyle.cursor=textboxskin.getDrawable("cursor"); 
     textfieldstyle.selection=textboxskin.getDrawable("selection"); 


     textfieldusername = new TextField("username", textfieldstyle); 

, который выглядит следующим образом:

enter image description here

Как вы можете видеть, что это выглядит ужасно левый центрированный ...

ответ

2

Используйте класс Таблица для вывода пользовательских интерфейсов scene2d. Чтобы настроить таблицу:

stage = new Stage(); 
Table table = new Table(); 
table.setFillParent(true); 
stage.addActor(table); 
table.add(textFieldUsername).padBottom(20f); //also use padTop, padLeft, and padRight 
table.row(); 

В главном цикле, звоните:

stage.act(Gdx.graphics.getDeltaTime()); 
stage.draw(); 

Для получения дополнительной информации о таблицах, см: http://code.google.com/p/table-layout/

8

EDIT: Я пытался сделать следующее и она работала в моих тестах:

textfieldstyle.background.setLeftWidth(textfieldstyle.background.getLeftWidth() + 10); 

Поиск в libgdx API Я не мог найти способ указать дополнение для текста внутри компонента TextField.

В качестве обходного пути вы можете скопировать исходный источник TextField и создать новый TextField с другим именем, обеспечивающим способ реализации дополнения.

Скопируйте содержимое текстового поля libgdx TextField (https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/scenes/scene2d/ui/TextField.java?source=cc) в другой файл и назовите его MyTextField (в качестве примера). Замените сломанные ссылки TextField новым именем класса.

Создать новую переменную с именем paddingLeft, например:

public float paddingLeft = 0.0f; 

В методе Жеребьевка(), вы можете добавить отступы на сумму, чтобы определить новую позицию для строки. Если код говорит:

font.draw(batch, displayText, x + bgLeftWidth + textOffset, y + textY + yOffset, visibleTextStart, visibleTextEnd); 

заменить:

font.draw(batch, displayText, x + bgLeftWidth + textOffset + leftPadding, y + textY + yOffset, visibleTextStart, visibleTextEnd); 

(обратите внимание на "+ leftPadding" во втором коде)

Затем, если вы используете скины, помните, чтобы сослаться TextField в файле uiskin.json:

mypackage.MyTextField$TextFieldStyle: { 
    default: { selection: selection, background: textfield, font: default-font, fontColor: white, cursor: cursor } 
} 

и использовать его в коде:

MyTextField txtTest = new MyTextField("Test", skin); 
txtTest.leftPadding = 10.0f; 

Это не идеальный способ, но он будет работать.

1

Вы можете использовать NinePatch. Это разделяет вашу текстуру на девять «патчей», которые вы определяете их высоту и ширину, а затем вы передаете ее в NinePatchDrawable, которую вы можете передать в TextButton.Я считаю, что внешние «патчи» действуют как поля и с некоторой настройкой (не напряженной) выглядят великолепно и достигают ваших целей.

Я узнал о них с этого поста: Loading nine-patch image as a Libgdx Scene2d Button background looks awful

Смежные вопросы