web-dev-qa-db-fra.com

Dans Android EditText, comment forcer l'écriture en majuscule?

Dans mon application Android, j'ai différents EditText où l'utilisateur peut entrer des informations. Mais je dois forcer l'utilisateur à écrire en lettres majuscules. Connaissez-vous une fonction pour le faire?

123
Natacha

Android a en fait un InputFilter intégré, rien que pour ça !

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

Attention, setFilters réinitialisera tous les autres attributs définis via XML (c.-à-d. maxLines, inputType, imeOptinos...). Pour éviter cela, ajoutez vos filtres aux filtres existants.

InputFilter[] editFilters = <EditText>.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = <YOUR_FILTER>;  
<EditText>.setFilters(newFilters);
315
ErlVolton

Si tu veux forcer l'utilisateur à écrire lettres majuscules par défaut dans votre EditText, il vous suffit d'ajouter Android:inputType="textCapCharacters". (L'utilisateur peut toujours passer manuellement en minuscule.)

109
Aoyama Nanami

Réglez le input type sur TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS. La keyboard devrait honorer cela.

20
Gabe Sechan

Vous pouvez utiliser deux voies.

Première manière:

Définissez Android:inputType="textCapSentences" sur votre texte d'édition.

Deuxième manière:

Lorsque l'utilisateur entre le numéro, vous devez utiliser l'observateur de texte et changer les lettres minuscules en majuscules.

edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
      }
    }
});  
15
Harshid

Vous pouvez ajouter la propriété Android:textAllCaps="true" à votre fichier xml dans EditText. Cela forcera le clavier d'entrée logicielle à apparaître en mode majuscule. La valeur que vous entrez apparaîtra en majuscule. Toutefois, cela ne garantira pas que l'utilisateur ne pourra entrer que des lettres UpperCase. S'ils le souhaitent, ils peuvent toujours recourir aux lettres minuscules. Si vous voulez vous assurer que la sortie de Edittext est en majuscule, vous devez convertir manuellement la chaîne d'entrée à l'aide de la méthode toUpperCase() de la classe String.

12
Abhishek

Plutôt que de vous inquiéter de votre utilisation du clavier, pourquoi ne pas accepter n'importe quelle entrée, minuscule ou majuscule, et convertir la chaîne en majuscule?

Le code suivant devrait aider:

EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase

Ceci est convivial car il est inutile pour l'utilisateur de savoir que vous avez besoin de la chaîne en majuscule. J'espère que cela t'aides.

10
anthonycr

Vous devriez mettre Android:inputType="textCapCharacters" avec Edittext dans un fichier xml.

10
Pabel

Utiliser le filtre d'entrée

editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
8
Sreejesh K Nair

Encore mieux ... un liner dans Kotlin ...

// gets your previous attributes in XML, plus adds AllCaps filter    
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())

Terminé!

7
S Pimenta

Faites juste ceci:

// ****** Every first letter capital in Word *********
<EditText
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:inputType="textCapWords"
    />

//***** if all letters are capital ************

    Android:inputType="textCapCharacters"
6
Pravin Suthar

Essayez d’utiliser l’un des codes ci-dessous pour résoudre votre problème.

par programmation:

editText.filters = editText.filters + InputFilter.AllCaps()

XML:

Android:inputType="textCapCharacters" with Edittext
5
Nivedh
edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
      }
      editText.setSelection(editText.getText().length());
    }
});  
5
Anderson Carvalho

Pour obtenir tout le capital, utilisez ce qui suit dans votre XML:

<EditText
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:textAllCaps="true"
    Android:inputType="textCapCharacters"
/>
4
akshay shetty

Dans kotlin, dans le fichier .kt, apportez les modifications suivantes:

edit_text.filters = edit_text.filters + InputFilter.AllCaps()

Utilisez la propriété synthétique pour un accès direct au widget avec l'identifiant. Et en XML, pour votre texte de modification, ajoutez quelques indicateurs supplémentaires comme:

<EditText
    Android:id="@+id/edit_text_qr_code"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    ...other attributes...
    Android:textAllCaps="true"
    Android:inputType="textCapCharacters"
    />

Ceci mettra à jour le clavier en tant que majuscule.

3
vishnu benny

Sur la base de la réponse acceptée, cette réponse fait la même chose, mais en Kotlin. Juste pour faciliter le copypasting: ·)

private fun EditText.autocapitalize() {
    val allCapsFilter = InputFilter.AllCaps()
    setFilters(getFilters() + allCapsFilter)
}
1
Roc Boronat

J'utilise Visual Studio 2015/Xamarin pour créer mon application pour Android 5.1 et Android 6.0 (le même apk est installé sur les deux).

Lorsque j'ai spécifié Android:inputType="textCapCharacters" dans mon axml, le clavier AllCaps est apparu comme prévu sur Android 6.0, mais pas Android 5.1. J'ai ajouté Android:textAllCaps="true" à mon axml et toujours aucun clavier AllCaps sur Android 5.1. J'ai défini un filtre à l'aide de EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() }); et, alors que le clavier virtuel affiche les minuscules sur Android 5.1, le champ de saisie est maintenant AllCaps.

EDIT: Les différences de comportement que j'ai observées et supposées être liées au système d'exploitation étaient en réalité dues au fait que j'avais différentes versions de Google Keyboard sur les dispositifs de test. Une fois les appareils mis à jour avec le dernier clavier Google (publié en juillet 2016), le comportement "Tout en majuscule" était cohérent sur tous les systèmes d'exploitation. Maintenant, tous les périphériques affichent des caractères minuscules sur le clavier, mais l'entrée est en majuscule à cause de SetFilters(new IInputFilter[] { new InputFilterAllCaps() });

1
Tony

Pour obtenir clavier en majuscule lorsque vous cliquez edittext utilisez ce code dans votre code xml,

<EditText
    Android:id="@+id/et"
    Android:layout_width="250dp"
    Android:layout_height="wrap_content"
    Android:hint="Input your country"
    Android:padding="10dp"
    Android:inputType="textCapCharacters"
    />
1
Ashana.Jackol

Équivalent Xamarin de la réponse d'ErlVolton:

editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
1
stovroz

Pour moi, cela a fonctionné en ajoutant Android: textAllCaps = "true" et Android: inputType = "textCapCharacters"

<Android.support.design.widget.TextInputEditText
                    Android:layout_width="fill_parent"
                    Android:layout_height="@dimen/edit_text_height"
                    Android:textAllCaps="true"
                    Android:inputType="textCapCharacters"
                    />
1
Udara Abeythilake

Un Java 1-liner de la solution proposée pourrait être:

editText.setFilters(Lists.asList(new InputFilter.AllCaps(), editText.getFilters())
    .toArray(new InputFilter[editText.getFilters().length + 1]));

Notez qu'il faut com.google.common.collect.Lists.

0
boriguen

Réalisation simple de kotlin

fun EditText.onlyUppercase() {
    inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
    filters = arrayOf(InputFilter.AllCaps())
}

PS pour moi filters est toujours vide au début

0
V. Kalyuzhnyu