Gestion de l'Accessibilité en Android Natif : Guide Technique 2026

Contexte légal et réglementaire
Pourquoi l'accessibilité est devenue incontournable en 2026 ?
L'accessibilité n'est plus une option facultative mais une triple nécessité :
Obligation légale : L'European Accessibility Act (EAA) impose des normes strictes
Marché significatif : Selon la Banque Mondiale, 15% de la population mondiale vit avec un handicap
Amélioration pour tous : Les fonctionnalités d'accessibilité profitent à l'ensemble des utilisateurs
L'European Accessibility Act (EAA)
Depuis le 28 juin 2025, l'European Accessibility Act (EAA) est entré en vigueur dans l'Union Européenne, transformant fondamentalement les obligations en matière d'accessibilité numérique. Cette directive impose des exigences strictes aux applications distribuées dans l’UE et complète les législations nationales existantes.
En France, il complète le RGAA (Référentiel Général d'Amélioration de l'Accessibilité) qui continue de s'appliquer. Les deux référentiels sont complémentaires et doivent être respectés.
Qui est concerné ?
L'EAA s'applique à toute application disponible sur un store européen, quelle que soit la localisation du siège social de l'entreprise. Les catégories suivantes sont particulièrement visées :
Services bancaires et financiers : applications de banque mobile, services de paiement, gestion de comptes
E-commerce : toute application permettant l'achat de biens ou services (physiques ou numériques)
Transport : applications de réservation et d'information pour le transport aérien, ferroviaire, maritime et routier
Télécommunications : applications de communication vocale et vidéo
Services publics : fournisseurs d'électricité, gaz, eau
Services de santé : applications de prise de rendez-vous, dossiers médicaux
Calendrier de mise en conformité
28 juin 2025 : Entrée en vigueur obligatoire pour les nouveaux produits et services
2026 : Début des contrôles
28 juin 2028 : Date limite pour la mise en conformité des services existants
Standards techniques de référence
L'EAA s'appuie sur la norme européenne EN 301 549, qui intègre les Web Content Accessibility Guidelines (WCAG) 2.1 niveau AA.
Pour la France : Le RGAA (Référentiel Général d'Amélioration de l'Accessibilité) reste la référence technique à appliquer. Le RGAA est aligné sur les WCAG et adapté au contexte français.
Les applications mobiles Android doivent respecter les quatre principes fondamentaux du WCAG (Web Content Accessibility Guidelines) :
Perceptible : L'information doit être présentable de manière que tous les utilisateurs puissent la percevoir
Utilisable : Les composants d'interface doivent être utilisables par tous
Compréhensible : L'information et le fonctionnement de l'interface doivent être compréhensibles
Robuste : Le contenu doit être compatible avec les technologies d'assistance actuelles et futures
Sanctions et responsabilités
Chaque État membre de l'UE désigne des autorités de surveillance du marché responsables du contrôle de la conformité. Les sanctions varient selon les pays mais peuvent inclure :
Amendes significatives
Retrait temporaire ou permanent de l'application des stores
Obligation de résolution sous délai contraint
Atteinte à la réputation de la marque
Sanctions spécifiques en France :
Selon les informations officielles du gouvernement français, les entreprises non conformes risquent :
Des amendes pouvant aller de 7 500 euros pour les contraventions de 5ème classe
Une astreinte de 3 000 euros par jour pour non-mise en conformité
Le montant total de l'astreinte ne peut dépasser 300 000 euros
Ces sanctions sont appliquées par la Direction générale de la concurrence, de la consommation et de la répression des fraudes (DGCCRF) qui assure la surveillance du marché en France. Les montants exacts dépendent de la gravité du manquement et du cadre juridique applicable.
Source : Mon parcours handicap
Services d'accessibilité Android
L'écosystème des services d'accessibilité
Android propose un écosystème complet de services d'accessibilité que les développeurs doivent prendre en compte :
TalkBack : Lecteur d'écran intégré qui fournit des retours vocaux
Switch Access : Permet l'interaction via des commutateurs physiques pour les utilisateurs avec mobilité réduite
Voice Access : Contrôle vocal de l'appareil
Select to Speak : Lecture sélective d'éléments à l'écran
Magnification : Agrandissement de l'écran
Live Captions : Sous-titres en temps réel pour le contenu multimédia
Sound Amplifier : Amplification et filtrage du son
Les API Accessibility
Implémentation avec Jetpack Compose
Jetpack Compose, le framework UI d'Android, intègre l'accessibilité au cœur de son architecture déclarative.
Principes fondamentaux des Semantics
Le système de sémantique de Compose permet de décrire le sens et le rôle des éléments UI pour les services d'accessibilité.
Descriptions de contenu
// ✅ Correct : Description claire pour les images
Image(
painter = painterResource(id = R.drawable.user_avatar),
contentDescription = "Photo de profil de l'utilisateur",
modifier = Modifier.size(48.dp)
)
// ❌ Incorrect : Absence de description
Image(
painter = painterResource(id = R.drawable.user_avatar),
contentDescription = null, // TalkBack ne pourra pas décrire l'image
modifier = Modifier.size(48.dp)
)
// ✅ Correct : Image purement décorative
Image(
painter = painterResource(id = R.drawable.decorative_pattern),
contentDescription = null, // Acceptable pour élément décoratif
modifier = Modifier.semantics {
invisibleToUser() // Indique explicitement que l'élément est décoratif
}
)
Bonnes pratiques pour les contentDescription :
Ne jamais inclure le type d'élément UI (TalkBack l'annonce automatiquement)
✅ Correct : "Soumettre"
❌ Incorrect : "Bouton Soumettre"
Chaque description doit être unique dans un conteneur
Dans une
RecyclerView, chaque élément doit avoir une description différente reflétant son contenu propreExemple : "Paris", "Lyon", "Marseille" plutôt que trois fois "Ville"
Décrire le contenu utile, pas l'apparence visuelle
✅ "Photo de profil de l'utilisateur"
❌ "Image ronde avec bordure bleue"
Pour les
TextView: Android annonce automatiquement le texte (pas besoin decontentDescription)Pour les éléments purement décoratifs (API 16+) :
Utiliser
android:importantForAccessibility="no"en XMLOu
Modifier.semantics { invisibleToUser() }en Compose
Rôles sémantiques
// Définition explicite du rôle pour un composant custom
Box(
modifier = Modifier
.clickable { /* Action */ }
.semantics {
role = Role.Button
contentDescription = "Télécharger le fichier"
}
.padding(16.dp)
) {
Icon(Icons.Default.CloudUpload, contentDescription = null)
Text("Télécharger")
}
Les rôles disponibles incluent : Button, Checkbox, Switch, RadioButton, Tab, Image, DropdownList.
Fusion des Semantics
Pour les composants composites, il est souvent nécessaire de fusionner les sémantiques :
// ✅ Fusion correcte pour un élément avatar avec nom
Row(
modifier = Modifier
.clickable { /* Ouvrir profil */ }
.semantics(mergeDescendants = true) {} // Fusionne tous les enfants
) {
Image(
painter = painterResource(R.drawable.avatar),
contentDescription = "Avatar",
modifier = Modifier.size(48.dp)
)
Text("Jean Dupont")
}
// TalkBack annonce : "Jean Dupont, Avatar, Bouton, double-tap pour activer"
// ❌ Sans fusion
Row(
modifier = Modifier.clickable { /* Ouvrir profil */ }
) {
Image(
painter = painterResource(R.drawable.avatar),
contentDescription = "Avatar",
modifier = Modifier.size(48.dp)
)
Text("Jean Dupont")
}
// TalkBack annonce séparément : "Avatar" puis "Jean Dupont" puis "Bouton"
Labels d'action personnalisés
Améliorer la clarté des actions avec des labels explicites :
Button(
onClick = { /* Action */ },
modifier = Modifier.semantics {
onClick(label = "Ouvrir l'article complet") {
true
}
}
) {
Text("Lire plus")
}
// TalkBack annonce : "Lire plus, Bouton, double-tap pour ouvrir l'article complet"
// Au lieu de : "Lire plus, Bouton, double-tap pour activer"
Gestion de l'ordre de traversée
Par défaut, TalkBack parcourt les éléments de haut en bas, de gauche à droite. Pour des layouts non-linéaires :
Box(
modifier = Modifier.semantics {
isTraversalGroup = true // Groupe de traversée
}
) {
(0..11).forEach { hour ->
Text(
text = "$hour",
modifier = Modifier
.align(getClockPosition(hour))
.semantics {
traversalIndex = hour.toFloat() // Ordre logique
}
)
}
}
Annonces dynamiques avec LiveRegion
Pour notifier les utilisateurs de changements de contenu :
var messageCount by remember { mutableStateOf(0) }
Text(
text = "Vous avez $messageCount nouveaux messages",
modifier = Modifier.semantics {
liveRegion = LiveRegionMode.Polite
}
)
// TalkBack annonce automatiquement les changements de messageCount
Modes disponibles :
LiveRegionMode.Polite: Annonce à la prochaine pause de TalkBack (recommandé)LiveRegionMode.Assertive: Interrompt immédiatement TalkBack (réservé aux urgences)
Gestion du focus
Différence entre focus accessibilité et focus clavier
val focusRequester = remember { FocusRequester() }
// ❌ Ne fonctionne PAS pour TalkBack (uniquement focus clavier)
TextField(
value = text,
onValueChange = { text = it },
modifier = Modifier.focusRequester(focusRequester)
)
LaunchedEffect(Unit) {
focusRequester.requestFocus() // Focus clavier uniquement
}
// ✅ Focus accessibilité correct
var focusedState by remember { mutableStateOf(false) }
TextField(
value = text,
onValueChange = { text = it },
modifier = Modifier.semantics {
focused = focusedState
}
)
LaunchedEffect(Unit) {
delay(100)
focusedState = true // TalkBack se déplacera sur cet élément
}
Exigences visuelles et de conception
Contraste des couleurs
Le ratio de contraste doit être d'au moins 4.5:1 pour les textes de moins de 18pt (ou 14pt en gras), et d'au moins 3:1 pour les textes plus grands.
// ✅ Utilisation des couleurs du Material Theme (contraste garanti)
Text(
text = "Texte accessible",
color = MaterialTheme.colorScheme.onBackground,
fontSize = 16.sp
)
// ❌ Couleurs hardcodées avec contraste insuffisant
Text(
text = "Texte difficile à lire",
color = Color.Gray, // Risque de contraste insuffisant
fontSize = 14.sp
)
Outils de vérification :
Android Studio Layout Inspector
Taille des cibles tactiles
Chaque élément interactif doit avoir une zone tactile d'au moins 48dp × 48dp (recommandation Google). Selon la documentation officielle Android, pour qu'un élément respecte cette recommandation, les deux conditions suivantes doivent être remplies :
La somme de
paddingLeft+minWidth+paddingRight≥ 48dpLa somme de
paddingTop+minHeight+paddingBottom≥ 48dp
Exemple XML (View System) :
<!-- ✅ Correct : 4 + 40 + 4 = 48dp (largeur) et 8 + 32 + 8 = 48dp (hauteur) -->
<ImageButton
android:paddingLeft="4dp"
android:minWidth="40dp"
android:paddingRight="4dp"
android:paddingTop="8dp"
android:minHeight="32dp"
android:paddingBottom="8dp"
android:contentDescription="@string/inspect" />
Exemple Compose :
// ✅ Taille tactile correcte avec size()
IconButton(
onClick = { /* Action */ },
modifier = Modifier.size(48.dp) // Zone tactile minimale garantie
) {
Icon(
imageVector = Icons.Default.Delete,
contentDescription = "Supprimer",
modifier = Modifier.size(24.dp) // Icône visuelle plus petite
)
}
// ✅ Alternative avec padding explicite : 12 + 24 + 12 = 48dp
Box(
modifier = Modifier
.clickable { /* Action */ }
.padding(12.dp)
.size(24.dp)
) {
Icon(Icons.Default.Delete, contentDescription = "Supprimer")
}
Note importante : Avec les marges intérieures (padding), la taille visible d'un élément peut être inférieure à 48dp × 48dp tout en respectant la zone tactile recommandée.
Mise à l'échelle du texte
Support du dimensionnement dynamique du texte (paramètre système) :
// ✅ Utilisation de l'échelle sp (scale-independent pixels)
Text(
text = "Texte scalable",
fontSize = 16.sp, // S'adapte aux préférences utilisateur
lineHeight = 24.sp
)
// ❌ Taille fixe en dp (ne scale pas)
Text(
text = "Texte non-scalable",
fontSize = 16.dp.toSp() // Mauvaise pratique
)
// ✅ Auto-sizing text (Compose BOM 2025.05+)
Text(
text = longText,
modifier = Modifier
.width(200.dp)
.autoSizeText(
minFontSize = 12.sp,
maxFontSize = 20.sp
)
)
Champs de saisie : labels et types
Labels persistants :
Chaque champ de saisie doit avoir un label qui reste visible après la prise de focus et après la saisie.
// ✅ Correct : label persistant avec TextField Compose
OutlinedTextField(
value = email,
onValueChange = { email = it },
label = { Text("Adresse e-mail") }, // Label toujours visible
modifier = Modifier.fillMaxWidth()
)
// ❌ Incorrect : placeholder qui disparaît
TextField(
value = email,
onValueChange = { email = it },
placeholder = { Text("Entrez votre e-mail") } // Disparaît après saisie
// Pas de label !
)
Types de clavier appropriés
Associer chaque champ au type de clavier correspondant pour faciliter la saisie.
// ✅ Email : clavier avec @ et .com
OutlinedTextField(
value = email,
onValueChange = { email = it },
label = { Text("E-mail") },
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Email,
imeAction = ImeAction.Next
)
)
// ✅ Téléphone : clavier numérique
OutlinedTextField(
value = phone,
onValueChange = { phone = it },
label = { Text("Téléphone") },
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Phone
)
)
// ✅ Nombre : clavier numérique avec décimales
OutlinedTextField(
value = amount,
onValueChange = { amount = it },
label = { Text("Montant") },
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Decimal
)
)
// ✅ URL : clavier avec / et .com
OutlinedTextField(
value = url,
onValueChange = { url = it },
label = { Text("Site web") },
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Uri
)
)
Types disponibles :
KeyboardType.Text: Texte standardKeyboardType.Email: E-mail (avec @ et domaines)KeyboardType.Phone: Numéros de téléphoneKeyboardType.Number: Nombres entiersKeyboardType.Decimal: Nombres décimauxKeyboardType.Uri: URLsKeyboardType.Password: Masque la saisie
Support RTL (Right-to-Left)
Pour les langues s'écrivant de droite à gauche (arabe, hébreu) :
CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl) {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.Start // Devient "fin" en RTL
) {
Icon(Icons.Default.ArrowForward, contentDescription = null)
Text("Suivant")
}
}
Orientation de l’appareil
L'application ne doit pas imposer une orientation (portrait ou paysage) pour accéder au contenu. L'utilisateur doit pouvoir consulter le contenu quelle que soit l'orientation.
// ✅ Correct : support des deux orientations
@Composable
fun MyScreen() {
// Le contenu s'adapte automatiquement à l'orientation
Column(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
) {
// Contenu accessible dans les deux orientations
}
}
// ❌ Incorrect : forcer l'orientation dans le manifeste
// <activity
// android:name=".MainActivity"
// android:screenOrientation="portrait" /> <!-- Ne pas faire -->
À partir d'Android 16 (API level 36), certaines configurations de verrouillage d’orientation peuvent être ignorées sur les appareils grands écrans ou en mode plein écran, notamment pour améliorer l’adaptabilité et la conformité aux standards d’accessibilité. Concrètement :
Les attributs
android:screenOrientationcomme"portrait","landscape","sensorPortrait", ou"sensorLandscape"sont ignorés par le systèmeCette restriction s'applique uniquement aux apps ciblant Android 16+ (targetSdkVersion 36+)
Cette évolution technique d'Android renforce la conformité EAA.
Tests d'accessibilité
Compose UI Check (Android Studio)
Compose UI Check est un mode d'audit automatique intégré à Android Studio pour les Compose Previews.
Activation :
Ouvrez un fichier avec des
@PreviewComposeCliquez sur le bouton "Compose UI Check mode" dans la preview
Android Studio analyse automatiquement votre UI
Détections :
Problèmes de contraste des couleurs
Texte étiré sur grands écrans
Tailles de cibles tactiles insuffisantes
Simulation de déficiences visuelles (daltonisme, etc.)
Avantages :
✅ Détection en temps réel pendant le développement
✅ Visualisation des problèmes directement dans le panneau "Problems"
Compose UI Check
Lint warnings dans Android Studio
Android Studio affiche automatiquement des avertissements pour les problèmes d'accessibilité :
<!-- ❌ Lint affichera : [Accessibility] Missing 'contentDescription' attribute on image -->
<ImageView
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@drawable/icon" />
<!-- ✅ Problème résolu -->
<ImageView
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@drawable/icon"
android:contentDescription="@string/icon_description" />
Les warnings Lint incluent des liens directs vers le code source pour faciliter la correction.
Tests manuels avec TalkBack
Procédure de test essentielle :
Activer TalkBack : Paramètres > Accessibilité > TalkBack
Naviguer avec des gestes :
Glisser vers la droite : élément suivant
Glisser vers la gauche : élément précédent
Double-tap n'importe où : activer l'élément focalisé
Glisser 2 doigts vers le haut/bas : scroller dans le contenu
Glisser en L : menu contextuel TalkBack
Vérifier :
Tous les éléments interactifs sont annoncés
Les annonces sont claires et pertinentes
L'ordre de navigation est logique
Les changements d'état sont communiqués
Pas de "piège au clavier" : on peut toujours revenir en arrière
TalkBack
Accessibility Scanner
Application Google permettant de détecter les problèmes d'accessibilité :
Installer depuis le Play Store
Activer le service
Capturer l'écran de votre app
Consulter les suggestions d'amélioration
Outils de debugging Android pour l'audit
Afficher la sortie vocale de TalkBack :
Pour faciliter les audits et les captures d'écran, vous pouvez afficher le texte prononcé par TalkBack sous forme de bulle à l'écran.
Aller dans Paramètres > Accessibilité > TalkBack > Paramètres
Dans Paramètres du développeur, activer Afficher la sortie vocale
Une bulle affichera maintenant le texte prononcé lors de la navigation
Avantages :
Facilite la prise de captures d'écran pour les rapports d'audit
Permet de vérifier rapidement les annonces TalkBack sans audio
Utile pour documenter les problèmes d'accessibilité
Afficher les contours des éléments :
Pour mesurer précisément les tailles des zones tactiles (Android 4.2+) :
Débloquer le mode développeur : Paramètres > À propos du téléphone, taper 7 fois sur Numéro de build
Aller dans Paramètres > Options pour les développeurs
Dans la section Tracé, activer Afficher les contours
Utilité :
Mesurer précisément les zones tactiles avec une règle
Identifier les zones sensibles qui n'ont pas de délimitation visuelle
Vérifier les marges entre éléments interactifs
Vérifier le critère de taille minimale (9mm × 9mm)
Options pour les développeurs - Affichage des contours
Pre-launch reports de la console du Play Store
La console du Play Store génère automatiquement des rapports de pré-lancement chaque fois que vous publiez un Android App Bundle. Ces rapports incluent une section dédiée à l'accessibilité.
Avantages
Automatique : Aucune configuration requise, le rapport est généré lors de la soumission
Tests sur appareils réels : Votre application est testée sur une gamme d'appareils Android physiques
Détection de problèmes d'accessibilité :
Labels de contenu manquants ou incorrects
Problèmes de contraste des couleurs
Zones tactiles trop petites
Éléments "EditText" mal configurés
Tests de compatibilité : Vérification sur différentes versions d'Android, notamment la dernière
Vulnérabilités de sécurité et confidentialité
Pré-vérifications : Détection de problèmes edge-to-edge et layouts grands écrans
Pre-launch reports de la console du Play Store
Accès : Disponible dans la console du Play Store après soumission d'une version
👉 Guide officiel des Pre-launch reports
👉 Formation Play Academy (5 minutes)
Tests utilisateurs
Les tests avec de véritables utilisateurs en situation de handicap fournissent des insights spécifiques et précieux difficiles à obtenir avec les outils automatisés ou les tests manuels effectués par l'équipe de développement.
Comment recruter des testeurs :
Organisations locales : Contactez des associations, universités ou centres de formation pour personnes handicapées de votre région
Cercle social : Demandez dans votre réseau personnel et professionnel - il y a souvent des personnes volontaires pour aider
Services de test utilisateurs : Des plateformes comme UserTesting.com peuvent inclure des utilisateurs en situation de handicap dans leurs panels de testeurs
Évolutions récentes de l’accessibilité
Expressive Captions
Les nouvelles légendes expressives affichent instantanément le ton, l'émotion et les indices sonores pour les vidéos.
// Configuration dans le fichier manifeste
<application>
<meta-data
android:name="com.google.android.accessibility.captions.expressive"
android:value="true" />
</application>
TalkBack amélioré par IA
TalkBack utilise désormais l'IA pour créer des descriptions visuelles et répondre à des questions de suivi. Pour optimiser ce système :
// Fournir des descriptions détaillées pour les images complexes
Image(
painter = painterResource(R.drawable.complex_chart),
contentDescription = "Graphique en barres montrant l'évolution des ventes " +
"sur 12 mois, avec un pic en décembre à 15000 unités et un creux " +
"en février à 8000 unités",
modifier = Modifier.fillMaxWidth()
)
Audio routing pour appareils auditifs
Android 16 supporte le routage audio diffusé pour les aides auditives :
// Vérifier la disponibilité du routage audio
val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
if (audioManager.isBluetoothLeAudioBroadcastSupported) {
// Configurer l'application pour le streaming vers appareils auditifs
}
Déclaration de conformité et documentation
Accessibility Statement obligatoire
L'EAA requiert une déclaration d'accessibilité publique qui doit être facilement accessible aux utilisateurs.
Où placer cette déclaration ?
Pour les applications mobiles, plusieurs options sont recommandées :
Dans l'application elle-même : Section "À propos" > "Accessibilité" ou "Paramètres" > "Accessibilité"
Sur votre site web : Page dédiée accessible depuis le footer (ex: example.com/accessibilite)
Dans la fiche Play Store : Mentionnée dans la description longue de l'application avec lien vers la version complète
Recommandation :
Privilégiez une combinaison des trois approches pour une visibilité maximale. La déclaration complète peut être hébergée sur votre site web, avec un accès direct depuis l'application (bouton "En savoir plus sur l'accessibilité" pointant vers l'URL).
Contenu recommandé :
# Déclaration d'accessibilité
## Niveau de conformité
Cette application est conforme au niveau AA des WCAG et à la norme EN 301 549.
## Date d'évaluation
Dernière évaluation : [date]
## Méthode d'évaluation
- Tests automatisés avec Accessibility Scanner
- Audit manuel avec TalkBack
- Tests utilisateurs avec personnes en situation de handicap
## Limitations connues
[Lister les éventuelles limitations avec plan de résolution]
## Contact
Pour signaler un problème d'accessibilité : accessibility@example.com
Documentation Play Store
Dans la Console Google Play, déclarer explicitement :
L'utilisation de l'API AccessibilityService (si applicable)
Les fonctionnalités d'accessibilité implémentées
La conformité aux standards internationaux
Checklist de mise en conformité
Niveau 1 : Fondamentaux (conformité minimale)
Toutes les images ont un
contentDescriptionappropriéContraste de couleurs ≥ 4.5:1 pour texte normal, ≥ 3:1 pour texte large
Tailles de cibles tactiles ≥ 48dp × 48dp
Support du dimensionnement du texte système
Tests TalkBack effectués sur les flux principaux
Pas d'informations transmises uniquement par la couleur
Pre-launch reports de la Play Console consultés et problèmes résolus
Lint warnings d'accessibilité corrigés dans Android Studio
Marges suffisantes entre zones sensibles adjacentes
Contenu accessible quelle que soit l'orientation (portrait/paysage)
Niveau 2 : Qualité (WCAG 2.1 AA complet)
Ordre de traversée logique vérifié
Labels d'action personnalisés pour clarté
LiveRegions pour changements de contenu dynamiques
Support RTL pour internationalisation
Tests avec Switch Access et Voice Access
Vidéos avec sous-titres et transcriptions
Temps suffisant pour compléter les actions
Pas de clignotement > 3 fois/seconde
Champs de saisie avec labels persistants (visibles après saisie)
Types de clavier appropriés pour chaque champ (email, téléphone, nombre, etc.)
Notifications sonores accompagnées d'alternatives visuelles
Pas de piège au clavier (focus peut toujours avancer/reculer)
Niveau 3 : Excellence (au-delà de la conformité)
Tests avec utilisateurs réels en situation de handicap
Documentation d'accessibilité pour l'équipe
Intégration des tests d'accessibilité en CI/CD
Surveillance continue des retours utilisateurs
Formation de l'équipe aux bonnes pratiques
Raccourcis clavier pour fonctions principales
Mode de contraste élevé dédié
Accessibilité : au-delà de la conformité
Bénéfices mesurables
Élargissement du marché : Environ 101 millions de personnes en Europe, soit un adulte sur quatre, ont une forme de handicap
Meilleure notation : Le Play Store évalue et affiche les fonctionnalités d'accessibilité
Amélioration UX générale : Les fonctionnalités d'accessibilité bénéficient à tous (ex: sous-titres en environnement bruyant)
Avantage concurrentiel : Différenciation sur un marché saturé
Coût de la non-conformité
Sanctions EAA : Amendes pouvant atteindre plusieurs millions d'euros selon les États membres
Retrait du store : Perte totale de revenus pour le marché européen
Atteinte à l'image : Publicité négative et avis défavorables
Dette technique : Résolution ultérieure plus coûteuse qu'une intégration initiale
Méthodologie : Le workflow accessibilité de Google
Google recommande une approche structurée en trois phases pour intégrer l'accessibilité dans le cycle de développement :
1. Design - Concevoir pour l'accessibilité
L'accessibilité commence dès la phase de conception. Material Design 3 intègre nativement les principes d'accessibilité :
Contraste des couleurs : Les palettes Material respectent automatiquement les ratios WCAG
Hiérarchie visuelle claire : Structure logique facilitant la navigation
Tailles adaptatives : Composants qui s'adaptent au dimensionnement du texte
États visuels distincts : Focus, hover, pressed clairement identifiables
👉 Material Design - Accessibility
2. Develop - Implémenter avec les bonnes pratiques
Durant le développement, appliquez les principes fondamentaux :
Descriptions de contenu pour tous les éléments interactifs
Zones tactiles ≥ 48dp × 48dp
Support du dimensionnement du texte système
Navigation au clavier/switch logique
Gestion appropriée du focus
L'essentiel de cette phase est couvert dans les sections techniques de cet article.
3. Test - Valider l'accessibilité
La validation est cruciale et multi-facettes :
Tests automatisés :
Accessibility Scanner (sur appareil)
Pre-launch reports de la Play Console (automatiques à chaque soumission)
Tests manuels : TalkBack, Switch Access, Voice Access
Checklists : Guidelines Material Design et WCAG 2.1
Tests utilisateurs : Idéalement avec des personnes en situation de handicap
Cette approche garantit que l'accessibilité est prise en compte à chaque étape, plutôt que d'être un ajout de dernière minute.
Ressources et outils
Parcours de formation recommandés
Google propose un parcours de formation structuré pour apprendre l'accessibilité Android, comprenant :
Vidéos introductives :
Premiers pas avec l'accessibilité
Fonctionnement des services d'accessibilité
Modèle d'accessibilité Android
Articles techniques :
Problèmes d'accessibilité courants
Méthodes de test
Atelier pratique (Codelab) :
Exercices pratiques sur les libellés de contenu, zones tactiles et contraste
Quiz de validation pour tester ses connaissances
Documentation officielle
Parcours de formation : Rendre votre application accessible (avec vidéos et quiz)
Documentation française officielle
Ressources officielles sur l'EAA
Union Européenne :
Outils de développement
Accessibility Scanner : Application Android pour scanner les problèmes
Layout Inspector : Outil Android Studio pour inspecter la sémantique
Compose Accessibility Testing : API de test intégrée
TalkBack : Lecteur d'écran de référence
Contrast Checker : Vérification ratios de contraste
Application de référence Google :
- Now in Android : Application Compose complète suivant toutes les bonnes pratiques Android, incluant l'accessibilité
Conclusion
L'accessibilité en Android natif n'est plus une option en 2026, mais une obligation légale via l'EAA et une nécessité business pour toucher l'ensemble du marché. Jetpack Compose offre des API puissantes qui facilitent considérablement l'implémentation de l'accessibilité, à condition de les utiliser correctement dès la conception.
Les points clés à retenir :
Intégrer dès le début : L'accessibilité "a posteriori" coûte 5× plus cher
Tester avec TalkBack : C'est le minimum absolu pour valider l'accessibilité
Utiliser les Semantics : Le système de sémantique Compose est votre meilleur allié
Viser WCAG 2.1 AA : C'est le standard de conformité EAA
Former l'équipe : L'accessibilité est une responsabilité collective
L'investissement dans l'accessibilité génère un retour positif mesurable : marché élargi, meilleure satisfaction utilisateur, conformité réglementaire et différenciation concurrentielle. Dans le contexte de l'EAA, c'est aussi une protection essentielle contre les risques légaux et financiers.p
Cet article a été rédigé en février 2026 sur la base des dernières recommandations de Google, de la norme EN 301 549 et des exigences de l'European Accessibility Act.






