web-dev-qa-db-fra.com

Comment capitaliser chaque lettre dans un EditText Android?

J'ai un tableau de editTexts que je fais comme ceci:

        inputs[i] = new EditText(this);
        inputs[i].setWidth(376);
        inputs[i].setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
        tFields.addView(inputs[i]);

Je veux que chaque personnage soit capitalisé. À l'heure actuelle, la première lettre du premier mot est en minuscule, puis tous les caractères suivants sont en majuscule. Je peux prendre ce que les utilisateurs saisissent une fois terminé et le convertir en majuscule, mais ce n'est pas vraiment ce que je vais faire. Existe-t-il un moyen de faire en sorte que ces champs se comportent comme je le souhaite?

17
clavio

Vous devez aussi dire que cela provient du texte "class":

inputs[i] = new EditText(this);
inputs[i].setWidth(376);
inputs[i].setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
tFields.addView(inputs[i]);

Le type input est un masque bit . Vous pouvez combiner les drapeaux en mettant le | (pipe) caractère au milieu, qui représente la fonction logique OR, même si, utilisé dans un masque de bits comme celui-ci, cela signifie "cet indicateur ET cet autre indicateur".

(Cette réponse est la même que celle de Robin, mais sans les "nombres magiques", une des pires choses que vous puissiez mettre dans votre code. L'API Android possède des constantes, utilisez-les plutôt que de copier les valeurs et risquer de casser le code.)

20
tiktak

Cela rendra tous les caractères majuscules lors de l'écriture.

edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

Réponse originale ici .

12
jzeferino

Utilisez simplement la méthode String.toUpperCase().

exemple : 

String str = "blablabla";
editText.setText(str.toUpperCase()); // it will give : BLABLABLA

MODIFIER :  

ajoute cet attribut à votre balise EditText dans votre xv layout

 Android:textAllCaps="true"

OU: 

Si vous voulez que les types d'utilisateurs soient en majuscules, vous pouvez implémenter une TextWatcher et utiliser la EditTextaddTextChangedListener pour l'ajouter, une méthode sur la onTextChange prend l'entrée utilisateur et la remplace par le même texte en majuscule.

editText.addTextChangedListener(upperCaseTextWatcher);

final TextWatcher upperCaseTextWatcher = new TextWatcher() {

public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}

public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    editText.setText(editText.getText().toString().toUpperCase());
    editText.setSelection(editText.getText().toString().length());
}

public void afterTextChanged(Editable editable) {
}

};
5
Houcine

Vous pouvez essayer ceci:

Android:inputType="textCapCharacters"

Cela a fonctionné pour moi. =)

4
Douglas Santos

Je sais que cette question est un peu ancienne, mais voici comment le faire de différentes manières:

Appliquer UpperCase en XML  

Ajoutez ce qui suit au XML EditText:

Android:textAllCaps="true"

Appliquer UpperCase en tant que filtre unique à un EditText en Java

Ici, nous définissons le filtre UpperCase comme seul filtre de EditText. Notez que cette méthode supprime tous les filtres ajoutés précédemment.

editText.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

Ajout de UpperCase aux filtres existants d'un EditText en Java

Pour conserver les filtres déjà appliqués de EditText, par exemple inputType, maxLength, etc., vous devez récupérer les filtres appliqués, ajouter le filtre UpperCase à ces filtres et les rétablir dans EditText. Voici un exemple comment:

InputFilter[] editFilters = editText.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = new InputFilter.AllCaps();  
editText.setFilters(newFilters);
2
Ricardo

Cela fonctionnerait

    inputs[i] = new EditText(this);
    inputs[i].setWidth(376);
    inputs[i].setInputType(0x00001001);
    tFields.addView(inputs[i]);

0x00001001 correspond à "constante textCapCharacters.

1
Robin Chander

À compter d'aujourd'hui, ses

Android:inputType="textCapCharacters"

0
Santanu

essayez d’utiliser cette seule ligne de code dans votre fichier XML:

Android:capitalize="sentences"
0
Pihu

Pour une raison quelconque, l'ajout du code XML ne fonctionnait pas sur mon appareil.

J'ai trouvé qu'un filtre de texte fonctionne en majuscule, comme ceci

    EditText editText = (EditText) findViewById(R.id.editTextId);

    InputFilter toUpperCaseFilter = new InputFilter() {
        public CharSequence filter(CharSequence source, int start, int end,
                                   Spanned dest, int dstart, int dend) {

            StringBuilder stringBuilder = new StringBuilder();

            for (int i = start; i < end; i++) {
                Character character = source.charAt(i);
                character = Character.toUpperCase(character); // THIS IS UPPER CASING
                stringBuilder.append(character);

            }
            return stringBuilder.toString();
        }

    };

    editText.setFilters(new InputFilter[] { toUpperCaseFilter });
0
med116