Android: Comment puis-je valider EditText d'entrée?
J'ai besoin de faire le formulaire de validation de la saisie sur une série de EditTexts. Je suis en utilisant OnFocusChangeListeners pour déclencher l'après validation par l'utilisateur dans chacun, mais cela ne se comportent pas comme vous le souhaitez pour la dernière EditText.
Si je clique sur le bouton "Terminé" tout en tapant dans la version finale du EditText puis le InputMethod est déconnecté, mais, techniquement, l'accent n'est jamais perdu sur le EditText (et donc la validation ne se produit jamais).
Quelle est la meilleure solution?
Devrais-je être suivi lors de la InputMethod se délie de chaque EditText plutôt que lors du changement de focus? Si oui, comment?
- Avez-vous vraiment besoin de valider l'EditText d'entrée dans le même temps, l'utilisateur est en train de taper? Pourquoi ne pas vous venez de valider l'EditText est une fois que l'utilisateur clique sur le bouton Terminé?
- C'est exactement ce que je veux: pour que le texte soit vérifiée lorsque l'utilisateur clique sur le bouton Done (Fait par le bouton, je veux dire le bouton "Terminé" sur le QWERTY InputManager...PAS la forme du bouton d'envoi). Sauf que quand j'appuie sur le bouton Terminé, l'accent reste sur le dernier élément dans le formulaire, et ma méthode de validation n'est jamais déclenché. Espère que ma formulation est claire...
- la solution est exactement ce que je cherchais, et se trouve ici: stackoverflow.com/questions/43013812/...
Vous devez vous connecter pour publier un commentaire.
Pourquoi n'utilisez-vous pas
TextWatcher
?Puisque vous avez un certain nombre de
EditText
cases pour être validé, je pense que la suite ne vous conviennent :android.text.TextWatcher
interfaceafterTextChanged(Editable s)
méthode comme suitLa
Editable s
n'aide pas vraiment à trouver ce qui EditText de la zone de texte est en cours de modification. Mais vous pouvez vérifier le contenu de l'EditText boîtes commedans la même méthode. J'espère que je suis clair, et si je le suis, ça aide! 🙂
EDIT: Pour un nettoyeur approche reportez-vous à Christopher Perry répondre ci-dessous.
afterTextChanged
est déclenché uniquement si une interaction de l'utilisateur modifie le texte. De manière programmatique-allié de réglage, il ne doit pas créer un problème. Mais c'est juste une spéculation. Essayez-la et laissez-nous savoir?java.lang.StackOverflowError
TextWatcher est un peu verbeux à mon goût, alors j'ai fait quelque chose d'un peu plus facile à avaler:
Simplement l'utiliser comme ceci:
EditText
EST-UNTextView
addTextChangedListener
après la résolution de votre edittext à partir de la vueSi vous voulez sympa de validation des popups et des images lorsqu'une erreur se produit, vous pouvez utiliser le
setError
méthode de laEditText
classe comme je l'ai décrit iciAfin de réduire le niveau de détail de la logique de validation, j'ai écrit un bibliothèque pour Android. Il prend soin de la plupart de la journée à jour des validations à l'aide d'Annotations et de règles prédéfinies. Il y a des contraintes telles que
@TextRule
,@NumberRule
,@Required
,@Regex
,@Email
,@IpAddress
,@Password
, etc.,Vous pouvez ajouter des annotations à votre INTERFACE utilisateur widget de références et d'effectuer des validations. Il vous permet également d'effectuer des validations de manière asynchrone, ce qui est idéal pour les situations telles que la vérification de nom d'utilisateur unique à partir d'un serveur distant.
Il y a un exemple sur le page d'accueil du projet sur la façon d'utiliser les annotations. Vous pouvez également lire les associé post de blog où 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 illustre l'utilisation de la bibliothèque.
La bibliothèque est évolutif, vous pouvez écrire vos propres règles par l'extension de la
Rule
classe.@Length
annotation.C'était sympa solution de ici
Approche mise à jour - TextInputLayout:
Google a lancé récemment d'aide à la conception de la bibliothèque et il y en a un composant appelé TextInputLayout et il prend en charge montrant une erreur via
setErrorEnabled(boolean)
etsetError(CharSequence)
.Comment l'utiliser?
Étape 1: Enveloppez vos EditText avec TextInputLayout:
Etape 2: Valider la saisie
J'ai créé un exemple sur mon Github, la caisse de l'exemple, si vous le désirez!
Je trouve InputFilter être plus approprié pour valider les saisies de texte sur android.
Voici un exemple simple:
Comment puis-je utiliser InputFilter à la limite de caractères dans un EditText dans Android?
Vous pouvez ajouter un Toast à la rétroaction de l'utilisateur à propos de vos restrictions.
Vérifiez également les android:inputType à l'étiquetage.
J'ai écrit une classe qui étend la classe EditText qui prend en charge nativement certaines méthodes de validation et est très flexible.
Actuelle, comme je l'ai écris, nativement pris en charge par attributs xml méthodes de validation sont:
Vous pouvez le vérifier ici
Espère qu'il vous plaira 🙂
J'avais besoin de faire de l'intra-validation sur le terrain et non pas inter-validation sur le terrain pour vérifier que mes valeurs ont été signés valeurs à virgule flottante dans un cas, et signé des valeurs à virgule flottante dans un autre. Voici ce qui semble fonctionner pour moi:
Remarque, vous ne devez pas avoir des espaces à l'intérieur de "numberSigned|numberDecimal". Par exemple: "numberSigned | numberDecimal" ne fonctionne pas. Je ne sais pas pourquoi.
Cela a l'air vraiment prometteur et juste ce que le doc a ordonné pour moi:
EditText Validateur
les validateurs personnalisés et de ces construit en:
Dans main.xml fichier
Vous pouvez mettre ce qui suit attrubute pour valider que alphabatics personnage peut accepter, dans l'edittext.
Ce faire :
Vous pouvez obtenir le comportement désiré par l'écoute lorsque l'utilisateur appuyez sur "Terminé" bouton sur le clavier, aussi regarder d'autres conseils sur le travail avec les EditText dans mon post "Android formulaire de validation de la bonne façon"
Exemple de code:
pour l'email et le mot de passe de validation essayer
J'ai créé cette bibliothèque pour android où vous pouvez valider une conception de matériel EditText l'intérieur et à l'EditTextLayout facilement comme ceci:
alors vous pouvez l'utiliser comme ceci:
Ensuite, vous pouvez vérifier si elle est valide comme ceci:
Pour plus d'exemples et de personnalisation de vérifier le référentiel
https://github.com/TeleClinic/SmartEditText