Conception Android EditText pour afficher de message d'erreur tel que décrit par google
J'ai besoin d'un EditText
qui ressemble à ce onError:
appel onError ressemble à ceci à la place :
Remarque: l'application est en cours d'exécution sur SDK 19 (4.4.2)
min SDK est 1
Est-il une méthode similaire à setError qui fait cela automatiquement,
ou dois-je écrire le code pour cela ?
Merci
- Vous êtes susceptibles d'être en mesure de le faire avec juste un
EditText
. Plus probablement, vous aurez besoin de quelque chose qui enveloppeEditText
ou sinon ajoute à elle. Voir github.com/rengwuxian/MaterialEditText.
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas besoin d'utiliser une bibliothèque tierce, depuis que Google a lancé le
TextInputLayout
dans le cadre de ladesign-support-library
.Suivante d'un exemple de base:
Mise en page
Remarque: Par la mise en
app:errorEnabled="true"
comme un attribut de laTextInputLayout
cela ne va pas changer sa taille une fois un message d'erreur apparaît - il essentiellement des blocs de l'espace.Code
Afin de montrer l'Erreur ci-dessous la
EditText
il vous suffit d'appeler#setError
sur leTextInputLayout
(PAS sur l'enfantEditText
):Résultat
Pour masquer l'erreur et de réinitialiser la teinte appelez simplement
til.setError(null)
.Remarque
Afin d'utiliser le
TextInputLayout
vous devez ajouter les lignes suivantes à votrebuild.gradle
dépendances:Paramètre une couleur personnalisée
Par défaut, la ligne de la
EditText
sera rouge. Si vous avez besoin d'afficher une couleur différente, vous pouvez utiliser le code suivant dès que vous appelezsetError
.Pour effacer, il suffit d'appeler la
clearColorFilter
fonction, comme ceci:editText.getBackground().clearColorFilter(); editText.invalidate()
mais cela ne fonctionne pasAppCompatActivity
pour "utiliser" le appcompat de "fonctionnalité".textInputLayout.setError("Error messsage")
la couleur de laEditText
devrait virer au rouge. Pour le réinitialiser, il suffit d'appelertextInputLayout.setError(null)
.editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);
n'est plus nécessaire avec la dernière bibliothèque de prise en chargeEditText
, pas laTextInputLayout
. J'ai vu cette réponse et ne pouvait toujours pas à comprendre ce que j'avais besoin de changer. Chose très facile à manquer.Votre
EditText
doit être enveloppé dans unTextInputLayout
Pour obtenir un message d'erreur comme tu le voulais, ensemble d'erreur à
TextInputLayout
Vous devez ajouter de la conception de la bibliothèque de prise en charge de la dépendance. Ajoutez cette ligne dans votre gradle dépendances
Appel
myTextInputLayout.setError()
au lieu demyEditText.setError()
.Ces conteneurs et de confinement ont une double fonctionnalité sur des erreurs de configuration. La fonctionnalité dont vous avez besoin est du conteneur de un. Mais vous pourriez avoir besoin de version minimale de 23 pour que.
inverse de la réponse est grand, mais il n'a pas de point comment faire pour supprimer l'flottant erreur info-bulle genre de chose
Vous aurez besoin
edittext.setError(null)
de l'enlever.Aussi, comme quelqu'un l'a souligné, vous n'avez pas besoin
TextInputLayout.setErrorEnabled(true)
Disposition
Code
Si quelqu'un s'est toujours confronté à l'erreur avec l'aide de google est la conception de la bibliothèque comme mentionné dans la réponse, puis, veuillez utiliser ce comme indiqué par @h_k qui est -
Au lieu de l'appeler setError sur TextInputLayout, Vous utilisez peut-être setError sur EditText lui-même.