Réponses:
Android a en fait un InputFilter intégré juste pour cela !
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
Attention, setFilters
remet tous les attributs qui ont été définis par XML (c. -à maxLines
, inputType
, imeOptinos
...). Pour éviter cela, ajoutez votre (vos) filtre (s) à ceux déjà 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);
maxLength
), Essayer d'ajouter la InputFilter.AllCaps()
à editText.getFilters
tableau. Voir stackoverflow.com/a/18934659/3890983
editText.filters = editText.filters + InputFilter.AllCaps()
editText.filters += InputFilter.AllCaps()
Kotlin est merveilleux! <3
Si vous voulez forcer l'utilisateur à écrire en majuscules par défaut dans votre EditText, il vous suffit d'ajouter android:inputType="textCapCharacters"
. (L'utilisateur peut toujours passer manuellement en minuscules.)
Réglez le input type
sur TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS
. Le keyboard
devrait honorer cela.
Vous pouvez utiliser deux méthodes.
Première manière:
Réglez android:inputType="textCapSentences"
votre EditText.
Deuxième manière:
Lorsque l'utilisateur entre le numéro, vous devez utiliser l'observateur de texte et changer la petite en majuscule.
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.length()); //fix reverse texting
}
}
});
Vous pouvez ajouter la android:textAllCaps="true"
propriété à votre fichier xml dans EditText. Cela forcera le clavier d'entrée logicielle à apparaître en mode tout en majuscules. La valeur que vous entrez apparaîtra en majuscules. Cependant, cela ne garantit pas que l'utilisateur ne peut entrer qu'en UpperCase
lettres. S'ils le souhaitent, ils peuvent toujours revenir aux lettres minuscules. Si vous voulez vous assurer que la sortie de la Edittext
est en majuscules, vous devez alors convertir manuellement la chaîne d'entrée en utilisant la toUpperCase()
méthode de la String
classe.
android:textAllCaps="true"
est uniquement une propriété de TextView ( stackoverflow.com/a/28803492/5268730 ). Utilisez android:inputType="textCapCharacters"
plutôt.
Vous devriez mettre android:inputType="textCapCharacters"
avec Edittext dans un fichier xml.
Plutôt que de vous soucier du clavier, pourquoi ne pas accepter n'importe quelle entrée, minuscule ou majuscule et convertir la chaîne en majuscules?
Le code suivant devrait vous 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 majuscules. J'espère que cela t'aides.
Encore mieux ... une doublure à Kotlin ...
// gets your previous attributes in XML, plus adds AllCaps filter
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())
Terminé!
<your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
<your_edit_text>.filters += InputFilter.AllCaps()
Dans kotlin , dans le fichier .kt, apportez des modifications:
edit_text.filters = edit_text.filters + InputFilter.AllCaps()
Utilisez la propriété synthétique pour un accès direct au widget avec identifiant. Et en XML, pour votre texte d'édition, 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"
/>
Cela mettra à jour le clavier en majuscules.
Utiliser le filtre d'entrée
editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
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());
}
});
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"
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"
/>
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"
/>
Sur la base de la réponse acceptée, cette réponse fait la même chose, mais à Kotlin. Juste pour faciliter le copypast: ·)
private fun EditText.autocapitalize() {
val allCapsFilter = InputFilter.AllCaps()
setFilters(getFilters() + allCapsFilter)
}
filters += InputFilter.AllCaps()
: D
Pour obtenir un clavier en majuscules lorsque vous cliquez sur edittext, utilisez ce code dans votre 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"
/>
J'utilise Visual Studio 2015 / Xamarin pour créer mon application pour Android 5.1 et Android 6.0 (même apk 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 sur Android 5.1. J'ai ajouté android:textAllCaps="true"
à mon axml et toujours pas de clavier AllCaps sur Android 5.1. J'ai défini un filtre en utilisantEditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });
et alors que le clavier virtuel affiche des caractères 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 fait parce que j'avais différentes versions de Google Keyboard sur les appareils de test. Une fois que j'ai mis à jour les appareils avec le dernier clavier Google (publié en juillet 2016 au moment de la rédaction de cet article), le comportement `` All Caps '' était cohérent entre les systèmes d'exploitation. Désormais, tous les appareils affichent des caractères minuscules sur le clavier, mais l'entrée est All Caps en raison deSetFilters(new IInputFilter[] { new InputFilterAllCaps() });
Équivalent Xamarin de la réponse d'ErlVolton:
editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
Ajoutez simplement le code ci-dessous à votre EditText de votre fichier xml.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Et si vous souhaitez autoriser à la fois le texte en majuscules et les chiffres, utilisez le code ci-dessous.
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
bien.