7
votes

Définir des espaces entre les lettres de TextView

Y a-t-il un moyen de définir un espace personnalisé (en pixels) entre les lettres à un editext? J'ai trouvé seulement comment définir des espaces entre les lignes, mais bot entre les lettres de la même rangée


3 commentaires

Jetez un coup d'œil ici Stackoverflow.com/questions/1063268/...


Ce n'est pas une question IOS, objectif C, je dois y parvenir sur Android, comme vous pouvez le constater dans les balises de la question.


Désolé, je n'ai pas vu ça


4 Réponses :


0
votes

Vous pouvez implémenter une personnalité textwatcher et ajouter x espaces tous les Temps l'utilisateur entre 1.


2 commentaires

Pardonnez ma candeur, mais cette solution est horrible, fonctionne mais est horrible.


Je suis d'accord, c'était une réponse hors du haut de la tête, comment allez-vous accomplir cela?



2
votes

Je devais le faire moi-même aujourd'hui, alors voici quelques mises à jour sur ce problème:

de API 21 Vous pouvez utiliser XML attribut Android: LettresPaCing = "2" code> ou du code myedittext.setletterspaçage (2); code> p>

Avant API 21, utilisez un TextWatcher avec le code suivant P>

private static final String LETTER_SPACING = " ";

private EditText myEditText;

private String myPreviousText;

...
// Get the views
myEditText = (EditText) v.findViewById(R.id.edt_code);

myEditText.addTextChangedListener(this);
...

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    // Nothing here
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    // Nothing here
}

@Override
public void afterTextChanged(Editable s) {
    String text = s.toString();

    // Only update the EditText when the user modify it -> Otherwise it will be triggered when adding spaces
    if (!text.equals(myPreviousText)) {            
        // Remove spaces
        text = text.replace(" ", "");

        // Add space between each character
        StringBuilder newText = new StringBuilder();
        for (int i = 0; i < text.length(); i++) {
            if (i == text.length() - 1) {
                // Do not add a space after the last character -> Allow user to delete last character
                newText.append(Character.toUpperCase(text.charAt(text.length() - 1)));
            }
            else {
                newText.append(Character.toUpperCase(text.charAt(i)) + LETTER_SPACING);
            }
        }

        myPreviousText = newText.toString();

        // Update the text with spaces and place the cursor at the end
        myEditText.setText(newText);
        myEditText.setSelection(newText.length());
    }
}


0 commentaires

10
votes

Utilisation de Android: LettresPaçage J'ai été capable d'ajouter un espacement entre les caractères dans un TextView xxx

Méthodes associées:

SETLETLETTERSPACING (flotteur)


1 commentaires

Ceci n'est disponible que dans le niveau API +21



0
votes

J'ai utilisé cela et travaille pour la plupart des niveaux d'API sinon tous.

kerningviews

fournit un ensemble de vues qui permet d'ajuster l'espacement entre les caractères de cette vue, aka, effet de kref.

https://github.com/aritraroy/kerningviews


0 commentaires