Comment masquer un EditText pour montrer le jj/mm/aaaa format de la date
Comment puis-je formater un EditText
à suivre la "dd/mm/yyyy
" format de la même façon que nous pouvons utilisant un format de TextWatcher
à masque l'entrée de l'utilisateur à ressembler à "de 0,05€". Je ne parle pas de limitation de caractères, ou de la validation d'une date, juste pour masquer le format précédent.
Vous devez vous connecter pour publier un commentaire.
J'ai écrit ce
TextWatcher
pour un projet, j'espère que ce sera utile à quelqu'un. Notez qu'il n' pas valider la date d'entrée par l'utilisateur, et vous devez gérer que lorsque le focus change, puisque l'utilisateur peut ne pas avoir terminé la saisie de la date.Mise à jour 25/06 Fait un wiki pour voir si nous arrivons à un meilleur code final.
Mise à jour 07/06
J'ai enfin ajouté une sorte de validation de l'observateur lui-même. Il va faire ce qui suit avec des dates non valides:
1900-2100
, de le modifier pour être dans la gammeCette validation correspond à mes besoins, mais certains d'entre vous le voulez changer un peu, et les plages sont facilement modifiables et vous pouvez considérer cette validations
Toast
message par exemple, pour informer l'utilisateur que nous avons modifié sa date, car il n'était pas valide.Dans ce code, je vais être en supposant que nous avons une référence à notre
EditText
appelédate
qui a cetteTextWatcher
attaché à elle, cela peut être fait quelque chose comme ceci:Lorsque l'utilisateur modifie le texte de la
EditText
Nous mettons également en place les deux autres fonctions parce que nous avons à
Ce qui produit l'effet suivant, où la suppression ou l'insertion de caractères de révéler ou cacher la
dd/mm/yyyy
masque. Il devrait être facile à modifier pour l'adapter à d'autres masques de format depuis que j'ai essayé de laisser le code le plus simple possible.cal
déclaré comme ceci:private Calendar cal = Calendar.getInstance();
ou autre, je serais obtenir unNullPointerException
à lacal.set(Calendar.MONTH, mon-1);
partiecurrent
,ddmmyyyy
,etc. vous avez fait de ce wiki, merci de préciser votre code23/11/2016
je tente de supprimer uniquement11
de la chaîne, puis-je obtenir de l'partielle date23/20/16YY
.La réponse actuelle est très bonne et a aidé à me guider vers ma propre solution. Il ya quelques raisons pour lesquelles j'ai décidé de poster ma propre solution, même si cette question a déjà une réponse valable:
À utiliser, il suffit de faire quelque chose comme:
Et la solution est illustrée ci-dessous:
une manière plus propre d'utiliser le Juan Cortés code de l'est de la mettre dans une classe:
ensuite, vous pouvez la réutiliser
Essayez d'utiliser une bibliothèque qui permet de résoudre ce problème depuis de masquage, il n'est pas disponible hors de la boîte.
Il y a beaucoup de cas particuliers (comme l'ajout/suppression de caractères dans le milieu de déjà masqué texte) et à gérer correctement cette, vous vous retrouverez avec beaucoup de code (et les bugs).
Voici quelques bibliothèques disponibles:
https://github.com/egslava/edittext-mask
https://github.com/dimitar-zabaznoski/MaskedEditText
https://github.com/pinball83/Masked-Edittext
https://github.com/RedMadRobot/input-mask-android
https://github.com/santalu/mask-edittext
** L'esprit qu'au moment de la rédaction de ces bibliothèques ne sont pas sans problèmes, il est donc de votre responsabilité de choisir celui qui vous convient le mieux et de tester le code.
Juan Cortés " wiki fonctionne comme un charme https://stackoverflow.com/a/16889503/3480740
Ici mon Kotlin version
Cette réponse ne s'applique pas à un masque intégral pour le reste typée chiffres. Cependant, il est lié et qui est la solution que j'ai besoin. Il fonctionne de manière similaire à la façon dont
PhoneNumberFormattingTextWatcher
œuvres.À mesure que vous tapez, il ajoute des barres obliques pour séparer une date formatée comme
mm/dd/yyyy
. , Il ne fait pas de validation - juste une mise en forme.Pas besoin d'un
EditText
de référence.Il suffit de régler l'auditeur et il fonctionne.
myEditText.addTextChangedListener(new DateTextWatcher());
Kotlin version sans validation
ajouter
android:inputType="date"
à votreEditText