TalkBack est un lecteur d’écran intégré de Google pour Android, faisant partie du package Android Accessibility Suite. Il énonce les éléments de l’interface et permet de contrôler l’appareil à l’aide de gestes, offrant aux utilisateurs aveugles et malvoyants un accès complet aux fonctionnalités du smartphone. Selon Google Accessibility Help (2025), TalkBack est préinstallé sur la plupart des appareils Android et prend en charge plus de 30 langues avec différents moteurs vocaux.
Points clés
TalkBack est un lecteur d’écran pour Android, développé par Google et faisant partie d’Android Accessibility Suite. Il fournit un retour vocal et un contrôle gestuel aux utilisateurs ayant une déficience visuelle. TalkBack fonctionne sur les smartphones, tablettes, Smart TV et appareils portables sous Wear OS.
TalkBack est apparu pour la première fois dans Android 1.6 (Donut) en 2009. Au départ, il s’agissait d’un projet séparé, mais avec la sortie d’Android 4.0 (Ice Cream Sandwich), il est devenu partie intégrante d’Android Accessibility Suite — un ensemble de services qui inclut également Switch Access et Select to Speak. À partir d’Android 10, TalkBack est préinstallé sur tous les appareils avec les services Google Play, y compris les appareils partenaires — Samsung, Xiaomi, Oppo et autres.
TalkBack prend en charge plus de 30 langues avec différents moteurs vocaux : Google Text-to-Speech, Samsung TTS et des moteurs tiers. Pour le français, Google TTS fournit une prononciation naturelle et une intonation correcte. L’utilisateur peut régler la vitesse de parole, la hauteur tonale et sélectionner le genre de la voix dans les paramètres de TalkBack.
TalkBack fonctionne sur la base d’AccessibilityService — un mécanisme système dans Android qui permet aux applications de recevoir des informations sur l’état de l’interface et d’interagir avec elle par programmation. Lorsque TalkBack est activé, il intercepte tous les événements tactiles et les transforme en gestes spéciaux de lecteur d’écran.
L’élément clé du fonctionnement de TalkBack est le focus d’accessibilité. Contrairement au focus de saisie standard, qui apparaît comme un surlignement de champ de texte, le focus d’accessibilité s’affiche comme un cadre jaune autour de l’élément et est invisible pour les utilisateurs sans TalkBack. Lorsque le focus d’accessibilité atteint un élément, TalkBack énonce son contenu, son type et son état.
L’utilisateur déplace le focus d’accessibilité à l’aide de gestes : balayer vers la droite — élément suivant, balayer vers la gauche — élément précédent. Les éléments sont parcourus dans l’ordre défini par AccessibilityNodeInfo — l’arbre d’accessibilité qu’Android construit pour chaque écran. Le développeur peut influencer l’ordre via les propriétés accessibilityTraversalBefore et accessibilityTraversalAfter, ce qui est particulièrement important pour les écrans complexes avec des mises en page personnalisées.
Chaque View à l’écran est représentée par un nœud dans l’arbre d’accessibilité — un objet AccessibilityNodeInfo. Cet objet contient : le texte de l’élément (contentDescription ou texte de la vue), le type d’élément (bouton, case à cocher, champ de saisie), l’état (activé/désactivé/sélectionné), la position à l’écran et une liste d’actions disponibles. TalkBack parcourt cet arbre et énonce chaque nœud dans l’ordre de parcours.
Si une View n’a pas de contenu textuel (par exemple, une ImageView sans description), elle devient invisible pour TalkBack — l’utilisateur ne connaîtra pas son existence. Pour résoudre ce problème, le développeur définit contentDescription — une description textuelle que TalkBack prononce au lieu du silence. Android prend également en charge stateDescription pour les éléments avec un état modifiable (coché/décoché) et hintText pour les champs de saisie avec des indices.
TalkBack transforme les gestes Android standard en gestes spéciaux de lecteur d’écran. La plupart des opérations sont effectuées avec un ou deux doigts, tandis que les gestes à trois doigts sont réservés aux actions globales.
| Action | Geste | Résultat |
|---|---|---|
| Énoncer l’élément | Toucher simple | Prononce le nom et le type de l’élément |
| Activer | Double toucher | Appui sur bouton ou navigation |
| Suivant | Balayer à droite | Élément suivant |
| Précédent | Balayer à gauche | Élément précédent |
| Défiler | Balayer 2 doigts | Défilement de liste |
| Menu TalkBack | Balayer haut-gauche | Menu global des paramètres |
Le geste balayer haut-gauche (balayage en forme de L) ouvre le menu global de TalkBack, où l’utilisateur peut modifier la vitesse de parole, activer le rideau d’écran, lancer un tutoriel ou ouvrir les paramètres. TalkBack prend également en charge un menu contextuel pour les éléments : balayer haut-droit ouvre une liste des actions disponibles pour l’élément actuel (par exemple, « Copier », « Coller » pour un champ de texte ou « Supprimer » pour un message de chat).
Android fournit une API riche pour la configuration de l’accessibilité. Le niveau de base est contentDescription, mais pour un support de qualité de TalkBack, il est nécessaire de travailler avec AccessibilityNodeInfo, AccessibilityDelegate et LiveRegion.
L’attribut android:contentDescription définit la description textuelle de l’élément pour TalkBack. Il est obligatoire pour ImageView, ImageButton, FloatingActionButton et toute View personnalisée sans contenu textuel. Pour les éléments standard (TextView, Button), contentDescription est facultatif — TalkBack lira le texte automatiquement.
val avatarView = ImageView(this)
avatarView.contentDescription = "Avatar de l’utilisateur"
avatarView.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_YES
val playButton = ImageButton(this)
playButton.contentDescription = "Lire la vidéo"
val progressBar = ProgressBar(this)
progressBar.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_NO
Le drapeau importantForAccessibility contrôle la visibilité de l’élément pour TalkBack. La valeur NO masque l’élément de l’arbre d’accessibilité — utile pour les images décoratives, les indicateurs et les arrière-plans personnalisés. La valeur YES inclut forcément l’élément dans le parcours même s’il n’a pas de texte. Il est important de ne pas abuser de NO : masquer des éléments sémantiquement importants rend l’application inaccessible pour les utilisateurs de TalkBack.
Pour les Views personnalisées qui n’utilisent pas de gestionnaires de clic standard, il est nécessaire de remplacer AccessibilityDelegate — une classe qui gère les événements d’accessibilité. Le délégué permet de définir des descriptions personnalisées, des types d’éléments et des listes d’actions disponibles que TalkBack proposera à l’utilisateur via le menu contextuel.
class CustomButtonDelegate : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View, info: AccessibilityNodeInfoCompat
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.text = "Bouton personnalisé"
info.className = Button::class.java.name
info.addAction(
AccessibilityNodeInfoCompat.AccessibilityActionCompat(
R.id.custom_action, "Partager"
)
)
}
override fun performAccessibilityAction(
host: View, action: Int, args: Bundle?
): Boolean {
if (action == R.id.custom_action) {
shareContent()
return true
}
return super.performAccessibilityAction(host, action, args)
}
}
Dans l’exemple, le délégué indique à TalkBack que l’élément est un bouton (className = Button) et fournit une action personnalisée « Partager » qui apparaîtra dans le menu contextuel de TalkBack. La méthode performAccessibilityAction gère l’invocation de cette action. Sans délégué, TalkBack traiterait la View personnalisée comme une simple zone non interactive, et l’utilisateur ne pourrait pas interagir avec elle.
Le support complet de TalkBack inclut non seulement contentDescription mais aussi la gestion du focus, LiveRegion pour les mises à jour dynamiques, les tests avec le lecteur d’écran activé et l’adaptation aux différentes versions d’Android.
Lorsque le contenu de l’écran change sans action explicite de l’utilisateur (par exemple, une notification de nouveau message apparaît ou un compteur de likes est mis à jour), TalkBack doit recevoir une notification. Pour cela, l’attribut android:accessibilityLiveRegion est utilisé pour une View en XML ou la méthode setAccessibilityLiveRegion() dans le code. La valeur polite ajoute l’annonce après la fin de l’énonciation en cours, tandis que assertive l’interrompt immédiatement.
val statusText = TextView(this)
statusText.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_POLITE
// Lorsque le texte est mis à jour, TalkBack annonce
// automatiquement le changement
statusText.text = "Nouveau message d’Anna"
// Pour les notifications critiques — assertive
errorBanner.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_ASSERTIVE
LiveRegion est l’équivalent Android de UIAccessibility.post sur iOS. Utilisez polite pour la plupart des mises à jour (nouveaux messages, mises à jour de statut) et assertive uniquement pour les erreurs critiques (échec de paiement, perte de connexion). L’utilisation excessive d’assertive crée une expérience utilisateur négative — TalkBack interrompra constamment l’énonciation en cours.
Pour les écrans complexes où plusieurs Views forment une seule unité logique, AccessibilityNodeProvider ou focusSearch est utilisé pour remplacer la navigation. Par exemple, un calendrier personnalisé avec 42 cellules (6 semaines × 7 jours) ne devrait pas forcer l’utilisateur à parcourir les 42 éléments pour atteindre le bloc suivant. Le développeur peut regrouper les cellules en unités logiques : mois → semaine → jour.
Pour Jetpack Compose, le modificateur .semantics {} fournit une API similaire : contentDescription, liveRegion, stateDescription, disabled et customActions. Compose prend également en charge mergeDescendants pour fusionner les sémantiques enfants en une seule, simplifiant le regroupement des éléments sans configuration manuelle d’accessibilityDelegate pour chaque View.
Button(
onClick = { sendMessage() },
modifier = Modifier.semantics {
contentDescription("Envoyer le message")
stateDescription("Prêt à envoyer")
}
) {
Icon(Icons.Filled.Send, "Envoyer")
}
Le test de TalkBack s’effectue à l’aide d’un appareil physique ou d’un émulateur avec le service activé. Il est recommandé de parcourir les scénarios utilisateur principaux avec l’écrain éteint (Screen Curtain) — cela simule une absence totale de retour visuel. Android fournit également Accessibility Scanner — un outil de détection automatique des problèmes d’accessibilité, qui met en évidence les éléments sans contentDescription, les zones tactiles trop petites et le faible contraste.
Questions fréquentes
Paramètres → Accessibilité → TalkBack → Activer. Pour une activation rapide, appuyez simultanément sur les deux touches de volume pendant 3 secondes. Google Assistant peut également activer TalkBack avec la commande vocale « Active TalkBack ».
TalkBack est un lecteur d’écran pour Android, VoiceOver est pour iOS. TalkBack utilise AccessibilityService et le focus d’accessibilité avec un cadre jaune, tandis que VoiceOver utilise UIAccessibility et le rotor. Les gestes et les menus diffèrent : TalkBack a des balayages en forme de L pour le menu global.
Définissez contentDescription pour tous les ImageView et les éléments personnalisés. Utilisez importantForAccessibility pour masquer les éléments décoratifs. Configurez accessibilityLiveRegion pour les mises à jour dynamiques et vérifiez avec Accessibility Scanner. Dans Compose, utilisez le modificateur .semantics{}.
C’est un objet représentant un élément d’interface dans l’arbre d’accessibilité. Il contient du texte, un type, un état, une position et une liste d’actions. TalkBack parcourt cet arbre pour la navigation. Le développeur peut le modifier via AccessibilityDelegate ou des attributs XML.
Vérifiez importantForAccessibility — il pourrait être défini sur NO. Assurez-vous que contentDescription est défini pour les éléments sans texte. Pour les Views personnalisées, implémentez AccessibilityDelegate avec onInitializeAccessibilityNodeInfo. Utilisez Accessibility Scanner pour le diagnostic.
Résumé
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.
Lisez aussi