Android Libgdx Scene2d-设置角色(文本字段)填充?

Android Libgdx Scene2d-设置角色(文本字段)填充?,android,user-interface,padding,libgdx,textfield,Android,User Interface,Padding,Libgdx,Textfield,我一直很难设置填充物或类似于演员的东西。我想不出路。我想我必须在皮肤上加些东西也许 我有一个文本字段: textboxskin = new Skin(); textboxskin.add("textfieldback", new Texture("data/textfieldback.png")); textboxskin.add("cursor", new Texture("data/cursortextfield.png"));

我一直很难设置填充物或类似于演员的东西。我想不出路。我想我必须在皮肤上加些东西也许

我有一个文本字段:

        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);
看起来是这样的:


如您所见,它看起来很可怕,以左为中心…

使用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();
有关表格的详细信息,请参见:

编辑: 我试着做了以下几点,并且在我的测试中奏效了:

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

搜索libgdxapi时,我找不到为TextField组件中的文本指定填充的方法

作为一种解决方法,yout可以复制原始TextField源并创建一个新的TextField,另一个名称提供了一种实现填充的方法

复制libgdx TextField()的内容 到另一个文件,并将其命名为MyTextField(作为示例)。用新类名替换损坏的TextField引用

创建一个名为paddingLeft的新变量,例如:

public float paddingLeft = 0.0f;
在draw()方法中,可以将填充添加到总和中,以定义字符串的新位置。守则上说:

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文件中引用您的文本字段:

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;

这不是理想的方法,但会起作用。

您可以使用NinePatch。这会将纹理分为九个“面片”,定义它们的高度和宽度,然后将其交给一个可以交给TextButton的NinePatchDrawable。我相信外部的“补丁”起到了边缘的作用,经过一些调整(不费力),它看起来会很棒,可以实现你的目标

我从这篇文章中了解到: