我一直无法设置填充或类似于演员的东西。无法弄明白的方式。我想我必须在皮肤上添加一些东西吗?
我有这个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);
看起来像这样:
正如你所看到的,它看起来很可怕,只是集中在一起......
答案 0 :(得分:9)
编辑: 我试着做以下事情并且在我的测试中起作用了:
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;
在draw()方法中,您可以将填充添加到总和中以定义String的新位置。代码所在的地方:
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”)
然后,如果你使用皮肤,记得在uiskin.json文件中引用你的TextField:
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 :(得分:2)
使用Table类布局scene2d UI。要设置表:
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/
答案 2 :(得分:1)
您可以使用NinePatch。这会将您的纹理分成九个“补丁”,您可以定义它们的高度和宽度,然后将它赋予NinePatchDrawable,您可以将其赋予TextButton。我相信外部的“补丁”充当了边缘,并且经过一些调整(不费劲)它看起来很棒并且可以实现你的目标。
我从这篇文章中了解到了这些: Loading nine-patch image as a Libgdx Scene2d Button background looks awful