Error State — qu'est-ce que c'est, affichage des erreurs de champ et implémentation dans Android

Auteur : IT Sectr Publié le : 2026-07-09 Temps de lecture : 5 min

Error State est un état de champ de saisie qui signale visuellement des données invalides. Dans Android, Error State est implémenté via TextInputLayout.setError(), qui surligne la bordure en rouge et affiche le texte d'erreur sous le champ. Selon les Material Design Guidelines, 2026, Error State doit être visible mais pas agressif : bordure rouge, texte d'erreur, icône. L'utilisation correcte de Error State augmente la conversion des formulaires de 20 à 30 %, car les utilisateurs détectent et corrigent rapidement les erreurs sans perdre le contexte.

Points clés

  • Error State est un état visuel du champ indiquant à l'utilisateur que les données sont invalides.
  • TextInputLayout.setError() est la méthode principale d'affichage des erreurs dans Material Design Components.
  • Indicateurs visuels : bordure rouge, texte d'erreur, icône de statut, animation d'apparition.
  • Réinitialisation d'erreur se produit automatiquement lors du changement de texte ou manuellement via setError(null).
  • Error State personnalisé est utilisé lorsqu'un affichage non standard est requis : icône seulement, couleur différente, groupe de champs.

Qu'est-ce que l'état d'erreur de champ dans Android ?

Error State est un mode d'affichage spécial d'un champ de saisie qui s'active lorsque les données saisies échouent à la validation. Visuellement, Error State comprend trois composants : un changement de couleur de la bordure ou du fond du champ (généralement en rouge), l'apparition d'un message texte sous le champ décrivant l'erreur, et optionnellement une icône ou un surlignage. Le but de Error State est d'attirer instantanément l'attention de l'utilisateur sur le champ problématique et de suggérer comment corriger l'erreur.

Dans Android, Error State est implémenté au niveau de TextInputLayout de Material Design Components. TextInputLayout encapsule EditText et gère ses états : normal, focused, error, disabled. La méthode setError(String) bascule le champ en état d'erreur, modifie la couleur de la bordure et affiche le message. Lorsque le texte change ou que setError(null) est appelé, le champ revient à l'état normal.

Selon les Material Design Guidelines, Error State doit être visible mais pas dominant. La couleur rouge de la bordure doit contraster avec l'état normal mais sans surcharger l'interface. Le message d'erreur doit contenir des informations spécifiques sur le problème et comment le résoudre. Une icône d'erreur (par exemple, un cercle rouge avec un point d'exclamation) renforce le signal visuel.

Comment setError fonctionne dans TextInputLayout

La méthode setError(CharSequence errorText) bascule TextInputLayout en état d'erreur. Le paramètre errorText est le texte affiché sous le champ. Si null est passé, l'erreur est effacée. TextInputLayout gère l'animation : le texte d'erreur apparaît avec un fondu en douceur, la bordure passe au rouge. Une icône d'erreur (par défaut : point d'exclamation dans un cercle) est affichée à la fin du champ.

Détails importants : setErrorEnabled(true) doit être appelé avant setError pour réserver l'espace pour le message d'erreur. Sinon, la disposition peut « sauter » lorsque l'erreur apparaît car l'espace n'est pas réservé. Il est recommandé de toujours activer le support d'erreur en XML via app:errorEnabled="true" pour éviter les décalages de disposition.

La méthode setError est automatiquement effacée lorsque le texte du champ change si setErrorEnabled(true) est activé. Ce comportement est pratique pour la validation en temps réel : dès que l'utilisateur commence à corriger l'erreur, la bordure rouge disparaît et le champ revient à l'état normal. Cependant, pour des scénarios complexes, cet effacement automatique peut être indésirable — dans ces cas, gérez l'erreur manuellement.

kotlin
val til = findViewById<TextInputLayout>(R.id.til_email)

// Activer le support d'erreur (définir en XML sinon)
til.isErrorEnabled = true

// Définir le message d'erreur
til.error = "Invalid email address"

// Effacer l'erreur
til.error = null

// Vérifier si l'erreur existe
if (til.error != null) {
    // Le champ est en état d'erreur
}

L'exemple utilise les propriétés Kotlin pour accéder à setError/isErrorEnabled. TextInputLayout met automatiquement à jour l'interface : modifie boxStrokeColor, affiche l'icône d'erreur, affiche le texte d'erreur. Si le texte dans EditText change, l'erreur est effacée automatiquement. Pour une réinitialisation manuelle, définissez error = null.

Moyens alternatifs d'affichage des erreurs

Tous les projets n'utilisent pas Material Design Components. Pour un affichage d'erreur personnalisé, vous pouvez utiliser un TextView séparé sous EditText qui devient visible en cas d'erreur. Cette approche offre un contrôle total sur les styles et le placement du message. Par exemple, vous pouvez placer le message à droite du champ, utiliser une couleur de fond différente ou ajouter une icône à gauche du texte.

Dans Jetpack Compose, Error State est implémenté via le paramètre isError dans OutlinedTextField ou TextField. Lorsque isError = true, la bordure devient rouge et vous pouvez afficher le texte d'erreur via supportingText. Compose n'a pas d'effacement automatique intégré lors du changement de texte — le développeur gère l'état d'erreur manuellement avec remember et mutableStateOf.

Pour les erreurs de groupe (un seul message pour plusieurs champs, par exemple, « Remplissez tous les champs obligatoires »), utilisez Snackbar, Dialog ou un bloc en ligne en haut du formulaire. Une erreur de groupe ne remplace pas l'Error State des champs individuels mais le complète. L'utilisateur voit d'abord le message général, puis cherche les champs spécifiques avec des erreurs.

MéthodeAvantagesInconvénientsQuand l'utiliser
TextInputLayout.setErrorStandard, animation, effacement autoMaterial Components uniquementOption principale pour MDC
TextView séparéContrôle total des stylesGestion manuelle de la visibilitéThèmes personnalisés, sans MDC
Compose isErrorIntégré dans ComposeGestion d'état manuelleProjets Jetpack Compose
Snackbar/DialogMessage de groupeNon lié à un champ spécifiqueComplément à Error State du champ

Couleurs, icônes et animation des erreurs

La couleur de Error State dans Material Design Components est contrôlée via l'attribut boxStrokeErrorColor ou l'attribut colorError dans le thème. Par défaut, la couleur rouge système est utilisée, mais elle peut être redéfinie dans le thème de l'application ou directement dans TextInputLayout via app:boxStrokeErrorColor="@color/customErrorColor". Pour la prise en charge du thème sombre, il est recommandé d'utiliser un sélecteur avec différentes couleurs pour les modes clair et sombre.

Icône d'erreur est configurée via app:errorIconDrawable. Par défaut, un point d'exclamation dans un cercle est affiché. Elle peut être remplacée par une icône personnalisée ou supprimée complètement en définissant app:errorIconDrawable="@null". L'icône est affichée à la fin de TextInputLayout et sert de marqueur visuel supplémentaire. Dans Material Design 3, l'icône d'erreur est obligatoire pour l'accessibilité.

L'animation d'apparition de l'erreur est intégrée dans TextInputLayout : le texte glisse du bas avec un changement progressif d'opacité. Pour une animation personnalisée, utilisez Transition API ou MotionLayout. Par exemple, secouer le champ lors d'une erreur attire une attention supplémentaire. Cependant, l'utilisation excessive d'animations dégrade l'UX — une apparition en douceur du message est suffisante.

Gestion de l'état d'erreur lors de la validation

La gestion de Error State se divise en deux étapes : définir l'erreur lors de la validation du champ et effacer l'erreur lors de la correction. Dans le cas le plus simple, la validation est appelée dans TextWatcher.afterTextChanged : si la valeur est invalide, setError est appelé avec un message d'erreur. Si valide, setError(null) est appelé. TextInputLayout masque automatiquement l'erreur lorsque setError(null) efface l'état.

Pour la validation de formulaire, les erreurs sont définies lors de l'étape d'envoi du formulaire. Parcourez tous les champs, validez chacun, définissez les erreurs pour les champs invalides et concentrez-vous sur le premier champ erroné. Le bouton d'envoi est bloqué pendant ce processus. Si le formulaire est grand, il est recommandé de faire défiler jusqu'au premier champ avec erreur et de définir le focus automatiquement.

La règle du focus unique d'erreur : lors de l'envoi d'un formulaire, définissez le focus uniquement sur le premier champ avec erreur. L'utilisateur corrige une erreur à la fois, et après la correction, le champ suivant avec erreur reçoit automatiquement le focus. Cette approche étape par étape réduit la charge cognitive. Material TextInputLayout n'intercepte pas le focus lors de la définition d'une erreur — cela doit être fait manuellement via requestFocus().

Erreurs courantes lors du travail avec Error State

La première erreur — absence de isErrorEnabled. Si setErrorEnabled n'est pas appelé avant setError, la disposition peut se décaler lorsque le message d'erreur apparaît. C'est particulièrement critique si le champ est au milieu de l'écran — l'utilisateur perd sa position de défilement. Activez toujours setErrorEnabled(true) en XML via app:errorEnabled="true" ou par programmation avant de définir une erreur.

La deuxième erreur — message d'erreur trop long. Un texte long se répartit sur plusieurs lignes et peut chevaucher les champs voisins. La longueur recommandée du message d'erreur est de 20 à 40 caractères. Si plus d'informations sont nécessaires, utilisez helperText à l'état normal ou une info-bulle pour des explications supplémentaires. La brièveté est la base d'un bon Error State.

La troisième erreur — ignorer l'accessibilité. Error State doit être accessible aux lecteurs d'écran. TextInputLayout annonce automatiquement l'erreur via contentDescription, mais les implémentations personnalisées doivent le faire manuellement. Utilisez announceForAccessibility() ou android:importantForAccessibility pour les messages d'erreur. Les utilisateurs de TalkBack doivent entendre l'erreur immédiatement après son apparition.

ErreurProblèmeSolution
Pas de isErrorEnabledDécalage de disposition à l'erreurapp:errorEnabled="true" en XML
Message longChevauchement des champs voisins20-40 caractères, helperText pour détails
Pas d'accessibilitéLecteur d'écran n'entend pas l'erreurImportant pour les utilisateurs TalkBack
Effacement auto sans vérificationChamp considéré valide à tortGestion manuelle de réinitialisation d'erreur

Questions fréquentes

Comment réinitialiser Error State lors de la correction d'une erreur ?

Si vous utilisez TextInputLayout, appelez setError(null). Activez setErrorEnabled(true) pour que l'espace sous le message reste réservé, mais que le texte disparaisse. Lorsque le texte dans EditText change, TextInputLayout efface automatiquement l'erreur. Pour un contrôle manuel, utilisez addTextChangedListener et setError(null) à chaque modification.

Pourquoi la disposition se décale-t-elle lorsqu'une erreur apparaît ?

Parce que l'espace pour le message d'erreur n'est pas réservé. Solution : activez app:errorEnabled="true" en XML pour TextInputLayout. Cela réserve l'espace pour le message, et la disposition ne se décalera pas. Lorsque l'erreur est inactive, l'espace reste vide mais la disposition est stable.

Comment changer la couleur d'erreur dans TextInputLayout ?

Utilisez l'attribut app:boxStrokeErrorColor en XML ou par programmation via til.setBoxStrokeErrorStateList(). La couleur peut être définie avec un sélecteur pour différents états. Vous pouvez également redéfinir l'attribut système colorError dans le thème de l'application pour changer la couleur d'erreur globalement pour tous les champs.

Puis-je afficher une erreur sans changer la couleur de la bordure ?

Oui, utilisez app:errorEnabled="true" et setError() — mais remplacez boxStrokeErrorColor par la couleur par défaut du champ. L'icône et le texte d'erreur seront toujours visibles, mais la bordure conservera sa couleur d'origine. Cependant, cela réduit la visibilité de l'erreur, ce qui contredit les recommandations d'accessibilité de Material Design.

Comment implémenter Error State dans Jetpack Compose ?

Dans Compose, utilisez isError = true dans OutlinedTextField ou TextField. Le texte d'erreur est passé via le paramètre supportingText. Gérez l'état avec mutableStateOf. Effacez isError manuellement lorsque le texte change. Compose n'a pas d'effacement automatique des erreurs, contrairement à TextInputLayout dans le système View.

Résumé

  • Error State — un état visuel du champ signalant une erreur par bordure rouge, texte et icône.
  • TextInputLayout.setError() — la méthode principale pour gérer Error State dans Material Design Components.
  • isErrorEnabled doit être activé pour éviter le décalage de disposition lors de l'apparition d'une erreur.
  • Méthodes alternatives : TextView séparé pour les erreurs, Snackbar pour les erreurs de groupe, Compose isError.
  • La couleur et l'icône de l'erreur sont configurées via boxStrokeErrorColor et errorIconDrawable.
  • L'accessibilité est obligatoire : le lecteur d'écran doit annoncer l'erreur lorsqu'elle apparaît.
  • Gestion d'erreur lors de la validation : définir sur valeur invalide, effacer lors de la correction ou manuellement.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi