1

如何在Android上以本机语言输入libgdx TextField?例如,我的意思是输入登录名或密码的能力。是的,我可以调用 smth likeGdx.input.getTextInput或原生 Android 对话框,但这真的很糟糕。

我的代码示例:

TextField loginField = new TextField("",getSkin());
loginField.setText("sdfdfsdаыва");

字段中的文本用 很好地绘制setText(),即皮肤字体包含所有必需的字形。但在 Android(模拟器和物理)上,我无法输入任何本机字符。

4

1 回答 1

1

对于使用拉丁文和西里尔文等短字母的用户文本输入,您可以使用 LibGDX FreeTypeFontGenerator & FreeTypeFontParameter :

private BitmapFont yourCustomFont;
private FreeTypeFontGenerator generator;
private FreeTypeFontParameter parameter;
private TextFieldStyle textFieldStyle;
private TextField textField;

...

public void show(){

    ...

    // Font generating

    yourCustomFont = new BitmapFont();
    generator = new FreeTypeFontGenerator(
            Gdx.files.internal("yourFont.ttf"));
    parameter = new FreeTypeFontParameter();

    // Complete the following sequence with the letters you need(each only once)
    parameter.characters =
    "БбДдЄєabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUXYZ/&1234567890()[]#'\"";

    parameter.size = (Gdx.graphics.getHeight() / 20);
    yourCustomFont = generator.generateFont(parameter);
    generator.dispose(); //Don't forget to dispose the generator

    // TextFieldStyle
    textFieldStyle = new TextFieldStyle();
    textFieldStyle.font = yourCustomFont;
    textFieldStyle.fontColor = Color.BLACK;

    // TextField
    textField = new textField("",textFieldStyle);
    textField.setTextFieldListener(new TextFieldListener() {

         public void keyTyped(TextField textField, char key) {

        }
    });

    ...

}

对于使用中文、韩文或日文等复杂字母的用户文本输入,您可能需要使用 .fnt + .png 格式的预渲染字体。为此,您可以使用 Hiero 或 BMFont 等软件。

http://www.angelcode.com/products/bmfont/

http://github.com/libgdx/libgdx/wiki/Hiero

使用 Hiero 或 BMFont 生成的复杂字母(韩文、日文、中文...)是大文件,因此您可能需要使用 LibGdx AssetManager 加载它们。然后将字体与您的 TextFieldStyle 一起使用,方法与前面描述的相同。

希望能帮助到你。

编辑: 现在,LibGDX 可以即时渲染复杂的字形: https ://github.com/libgdx/libgdx/wiki/Gdx-freetype

于 2015-01-12T10:36:41.973 回答