2013-04-19 5 views
1

Comment obtenir des entrées dans libgdx TextField en langue maternelle sur Android? Je veux dire une possibilité de saisir un identifiant ou un mot de passe par exemple. Oui, je pourrais appeler smth comme Gdx.input.getTextInput ou natif de dialogue Android, mais c'est vraiment horrible.libgdx textfield language sur Android

Mon exemple de code:

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

Texte dans le champ est bien dessiné avec setText(), à savoir la police de la peau contient tous les glyphes nécessaires. Mais sur Android (émulateur & physique) je ne peux pas entrer de caractère natif.

Répondre

1

Pour les entrées de texte de l'utilisateur en utilisant des alphabets courts comme le latin et cyrillique, vous pouvez utiliser le 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) { 

     } 
    }); 

    ... 

} 

Pour les entrées de texte de l'utilisateur en utilisant des alphabets complexes comme le chinois, le coréen ou le japonais, vous devrez peut-être utiliser une police pré-rendue au format .fnt + .png. Pour ce faire, vous pouvez utiliser des logiciels comme Hiero ou BMFont.

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

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

alphabets complexes (coréen, japonais, chinois ...) générés par Hiéron ou BMFont sont des fichiers de grande taille, de sorte que vous devrez peut-être de les charger avec le LibGdx AssetManager. Ensuite, utilisez la police avec votre TextFieldStyle, comme décrit précédemment.

Espérons que ça aide.

EDIT: Maintenant, LibGDX peut rendre glyphes complexes à la volée: https://github.com/libgdx/libgdx/wiki/Gdx-freetype