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?
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);
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.)
Réglez le input type
sur TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS
. La keyboard
devrait honorer cela.
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);
}
}
});
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
.
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.
Vous devriez mettre Android:inputType="textCapCharacters"
avec Edittext dans un fichier xml.
Utiliser le filtre d'entrée
editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
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é!
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"
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
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());
}
});
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"
/>
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.
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)
}
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() });
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"
/>
Équivalent Xamarin de la réponse d'ErlVolton:
editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
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"
/>
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
.
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