Quelle est la meilleure façon de limiter la longueur du texte d'un EditText
dans Android?
Existe-t-il un moyen de le faire via xml?
Quelle est la meilleure façon de limiter la longueur du texte d'un EditText
dans Android?
Existe-t-il un moyen de le faire via xml?
Réponses:
Documentation
Exemple
la source
maxLength
propriété fonctionne toujours.android:maxLength
équivaut àInputFilter.LengthFilter
, donc lorsque vous modifiez par programme son filtre, vous avez également modifié son filtre XML.setFilters
cessera deandroid:maxLength
fonctionner, car il écrase le filtre défini par le XML. En d'autres termes, si vous définissez des filtres par programme, vous devez les définir tous par programme.utilisez un filtre d'entrée pour limiter la longueur maximale d'une vue de texte.
la source
InputFilter
. Il remplace leandroid:maxlength
fichier xml, nous devons donc l'ajouter deLengthFilter
cette façon.la source
TextWatcher
.Une note pour les personnes qui utilisent déjà un filtre d'entrée personnalisé et qui souhaitent également limiter la longueur maximale:
Lorsque vous affectez des filtres d'entrée dans le code, tous les filtres d'entrée précédemment définis sont effacés, y compris un ensemble avec
android:maxLength
. J'ai découvert cela en essayant d'utiliser un filtre d'entrée personnalisé pour empêcher l'utilisation de certains caractères que nous n'autorisons pas dans un champ de mot de passe. Après avoir défini ce filtre avec setFilters, la longueur max n'a plus été observée. La solution consistait à définir maxLength et mon filtre personnalisé ensemble par programme. Quelque chose comme ça:la source
la source
J'ai eu ce problème et je considère qu'il nous manque une façon bien expliquée de le faire par programme sans perdre les filtres déjà définis.
Définition de la longueur en XML:
Comme la réponse acceptée l'indique correctement, si vous voulez définir une longueur fixe à un EditText que vous ne changerez plus à l'avenir, définissez simplement dans votre XML EditText:
Définition de la longueur par programmation
Pour définir la longueur par programme, vous devrez la définir via un
InputFilter
. Mais si vous créez un nouveau InputFilter et le définissez sur le,EditText
vous perdrez tous les autres filtres déjà définis (par exemple maxLines, inputType, etc.) que vous pourriez avoir ajoutés via XML ou par programme.C'est donc faux :
Pour éviter de perdre les filtres ajoutés précédemment, vous devez obtenir ces filtres, ajoutez le nouveau (maxLength dans ce cas) et redéfinissez les filtres
EditText
comme suit:Java
Kotlin a cependant rendu la tâche plus facile pour tout le monde, vous devez également ajouter le filtre à ceux déjà existants, mais vous pouvez y parvenir avec un simple:
la source
Pour tous ceux qui se demandent comment y parvenir, voici ma
EditText
classe étendueEditTextNumeric
..setMaxLength(int)
- définit le nombre maximum de chiffres.setMaxValue(int)
- limiter la valeur entière maximale.setMin(int)
- limiter la valeur entière minimale.getValue()
- obtenir une valeur entièreExemple d'utilisation:
Toutes les autres méthodes et attributs qui s'appliquent à
EditText
, bien sûr, fonctionnent également.la source
En raison de l'observation de goto10, j'ai rassemblé le code suivant pour protéger contre la perte d'autres filtres en définissant la longueur maximale:
la source
la source
Xml
Java:
Kotlin:
la source
Vous pouvez également y parvenir en ajoutant la définition suivante au fichier XML:
Cela limitera la longueur maximale du
EditText
widget à 6 caractères.la source
De material.io , vous pouvez utiliser
TextInputEditText
combiné avecTextInputLayout
:Vous pouvez configurer un mot de passe EditText avec drawable:
Ou vous pouvez limiter la longueur du texte avec / sans compteur:
Dépendance:
la source
XML
android:maxLength="10"
Par programme:
Remarque: en interne, EditText & TextView analysent la valeur de
android:maxLength
XML et l'utilisentInputFilter.LengthFilter()
pour l'appliquer.Voir: TextView.java # L1564
la source
Il s'agit d'une classe EditText personnalisée qui permet au filtre Longueur de cohabiter avec d'autres filtres. Merci à la réponse de Tim Gallagher (ci-dessous)
la source
de manière simple en xml:
si vous avez besoin de définir 4 caractères dans le texte d'édition XML, utilisez-le
la source
Cela fonctionne bien ...
android:maxLength="10"
cela n'acceptera que les
10
caractères.la source
Essayez ceci pour Java par programme :
la source
myEditText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(CUSTOM_MAX_LEN)});
J'avais vu beaucoup de bonnes solutions, mais je voudrais donner ce que je pense être une solution plus complète et conviviale, qui comprend:
1, longueur limite.
2, Si vous saisissez plus, donnez un rappel pour déclencher votre toast.
3, le curseur peut être au milieu ou à la queue.
4, l'utilisateur peut entrer en collant une chaîne.
5, Jetez toujours l'entrée de débordement et conservez l'origine.
Ce que j'ai échoué, c'est que si l'utilisateur met en surbrillance une partie de l'entrée actuelle et essaie de coller une chaîne très longue, je ne sais pas comment restaurer la surbrillance.
Tels que, la longueur maximale est définie sur 10, l'utilisateur a saisi «12345678», et marque «345» comme surbrillance, et essayez de coller une chaîne de «0000» qui dépassera la limitation.
Lorsque j'essaie d'utiliser edit_text.setSelection (start = 2, end = 4) pour restaurer le statut d'origine, le résultat est, il suffit d'insérer 2 espaces en tant que '12 345 678 ', pas la surbrillance d'origine. J'aimerais que quelqu'un résolve ça.
la source
Vous pouvez utiliser
android:maxLength="10"
dans EditText. (Ici, la limite est jusqu'à 10 caractères)la source
Kotlin:
ZTE Blade A520
a un effet étrange. Lorsque vous tapez plus de 10 symboles (par exemple, 15),EditText
affiche les 10 premiers, mais les 5 autres ne sont ni visibles ni accessibles. Mais lorsque vous supprimez des symboles avecBackspace
, il supprime d'abord les 5 bons symboles, puis supprime les 10 restants. Pour contourner ce problème, utilisez une solution :ou ca:
ou ceci, si vous voulez avoir des suggestions:
la source
de manière simple en xml:
pour le paramétrer, vous pouvez utiliser la fonction suivante
la source