J'ai besoin de faire la validation d'entrée de formulaire sur une série de EditTexts. J'utilise OnFocusChangeListeners pour déclencher la validation après que l'utilisateur a tapé dans chacun d'eux, mais cela ne se comporte pas comme souhaité pour le dernier EditText.
Si je clique sur le bouton "Terminé" en tapant dans le EditText final, alors le InputMethod est déconnecté, mais techniquement le focus n'est jamais perdu sur le EditText (et donc la validation ne se produit jamais).
Quelle est la meilleure solution?
Dois-je surveiller le moment où InputMethod se dissocie de chaque EditText plutôt que lorsque le focus change? Si c'est le cas, comment?
android
android-edittext
Stefan
la source
la source
Réponses:
Pourquoi n'utilisez-vous pas
TextWatcher
?Puisque vous avez un certain nombre de
EditText
cases à valider, je pense que les suivantes vous conviendront:android.text.TextWatcher
interfaceafterTextChanged(Editable s)
méthode comme suitL'
Editable s
aide n'aide pas vraiment à trouver le texte de la zone EditText qui est modifié. Mais vous pouvez directement vérifier le contenu des cases EditText commedans la même méthode. J'espère que je suis clair et si je le suis, ça aide! :)
EDIT: Pour une approche plus propre, reportez-vous à la réponse de Christopher Perry ci-dessous.
la source
TextWatcher est un peu verbeux à mon goût, j'ai donc rendu quelque chose d'un peu plus facile à avaler:
Utilisez-le simplement comme ceci:
la source
EditText
IS-ATextView
addTextChangedListener
après avoir résolu votre edittext à partir de la vueSi vous voulez de jolis popups et images de validation lorsqu'une erreur se produit, vous pouvez utiliser la
setError
méthode de laEditText
classe comme je la décris icila source
passwordConfirmTextField
, mais je dois faire référence à l'autrepasswordTextField
, afin de pouvoir les comparer. Aucune suggestion?Afin de réduire la verbosité de la logique de validation, j'ai créé une bibliothèque pour Android . Il prend en charge la plupart des validations quotidiennes à l'aide d'annotations et de règles intégrées. Il existe des contraintes telles que
@TextRule
,@NumberRule
,@Required
,@Regex
,@Email
,@IpAddress
,@Password
, etc.,Vous pouvez ajouter ces annotations à vos références de widget d'interface utilisateur et effectuer des validations. Il vous permet également d'effectuer des validations de manière asynchrone, ce qui est idéal pour des situations telles que la vérification d'un nom d'utilisateur unique à partir d'un serveur distant.
Il existe un exemple sur la page d'accueil du projet sur la façon d'utiliser les annotations. Vous pouvez également lire l' article de blog associé dans lequel j'ai écrit des exemples de codes sur la façon d'écrire des règles personnalisées pour les validations.
Voici un exemple simple qui décrit l'utilisation de la bibliothèque.
La bibliothèque est extensible, vous pouvez écrire vos propres règles en étendant la
Rule
classe.la source
@Length
annotation.C'était une bonne solution d' ici
la source
Approche mise à jour - TextInputLayout:
Google a récemment lancé une bibliothèque de support de conception et il existe un composant appelé TextInputLayout et il prend en charge l'affichage d'une erreur via
setErrorEnabled(boolean)
etsetError(CharSequence)
.Comment l'utiliser?
Étape 1: Enveloppez votre EditText avec TextInputLayout:
Étape 2: valider l'entrée
J'ai créé un exemple sur mon référentiel Github , consultez l'exemple si vous le souhaitez!
la source
com.google.android.material.textfield.TextInputLayout
(notez le changement matériel ). Je l'aiJ'ai écrit une classe qui étend EditText qui prend en charge nativement certaines méthodes de validation et est en fait très flexible.
Au moment où j'écris, les méthodes de validation d' attributs xml prises en charge nativement sont les suivantes:
Vous pouvez le vérifier ici
Je espère que vous l'apprécierez :)
la source
Je trouve que InputFilter est plus approprié pour valider les entrées de texte sur Android.
Voici un exemple simple: Comment utiliser InputFilter pour limiter les caractères dans un EditText sous Android?
Vous pouvez ajouter un toast pour informer l'utilisateur de vos restrictions. Vérifiez également la balise android: inputType.
la source
J'avais besoin de faire une validation intra-champ et non une validation inter-champ pour tester que mes valeurs étaient des valeurs à virgule flottante non signées dans un cas et des valeurs à virgule flottante signées dans un autre. Voici ce qui semble fonctionner pour moi:
Notez que vous ne devez pas avoir d'espaces à l'intérieur de "numberSigned | numberDecimal". Par exemple: "numberSigned | numberDecimal" ne fonctionnera pas. Je ne sais pas pourquoi.
la source
Cela semble vraiment prometteur et exactement ce que le doc m'a commandé:
EditText Validator
validateurs personnalisés plus ceux intégrés:
la source
Dans le fichier main.xml
Vous pouvez mettre l'attrubute suivant pour valider que seul le caractère alphabétique peut accepter dans edittext.
Faites ceci:
la source
Vous pouvez obtenir le comportement souhaité en écoutant lorsque l'utilisateur clique sur le bouton "Terminé" du clavier, consultez également d'autres conseils sur l'utilisation de EditText dans mon message "Validation du formulaire Android - la bonne manière"
Exemple de code:
la source
pour la validation de l'email et du mot de passe, essayez
la source
J'ai créé cette bibliothèque pour Android où vous pouvez valider une conception matérielle EditText à l'intérieur et EditTextLayout facilement comme ceci:
alors vous pouvez l'utiliser comme ceci:
Ensuite, vous pouvez vérifier s'il est valide comme ceci:
Pour plus d'exemples et de personnalisation, consultez le référentiel https://github.com/TeleClinic/SmartEditText
la source