Les utilisateurs de services d'accessibilité comme les lecteurs d'écran comptent sur les libellés de contenu pour comprendre la signification des éléments d'une interface.
Dans certains cas, par exemple lorsque l'information est transmise sous forme graphique dans un élément, les libellés de contenu peuvent fournir une description textuelle du sens ou de l'action associés à l'élément.
Si les éléments d'une interface utilisateur ne fournissent pas de libellé de contenu, il peut être difficile pour certains utilisateurs de comprendre les informations qui leur sont présentées ou d'interagir avec l'interface.
Implémentation
ViewLorsque certains types de Views
sont utilisés dans une interface, ils doivent fournir des libellés de contenu qui décrivent le rôle ou l'action associé aux Views
concernées.
Fournir des libellés de contenu
android:contentDescription
Lorsque vous utilisez une ImageView
, un ImageButton
, une CheckBox
ou d'autres Views
pour transmettre des informations sous forme graphique, précisez un attribut android:contentDescription
afin de fournir un libellé de contenu pour la View
concernée.
Un libellé de contenu dépend parfois d'informations disponibles uniquement lors de l'exécution et la signification d'une View
peut changer au fil du temps. Par exemple, un bouton "Lecture" peut devenir un bouton "Pause" pendant la lecture de la musique. Dans ces cas, utilisez View#setContentDescription(CharSequence contentDescription)
pour que le libellé de contenu soit mis à jour au moment voulu.
En règle générale, lorsqu'un service d'accessibilité décrit un ViewGroup
, il réunit les libellés de contenu de ses Views
enfants. Pour éviter cela et indiquer que vous souhaitez fournir votre propre description pour cet élément et ses Views
enfants non sélectionnables, définissez une contentDescription
dans le ViewGroup
. Vous devrez peut-être inclure les libellés de contenu provenant des Views
enfants dans une contentDescription
lorsque celle-ci est définie dans un ViewGroup
.
android:hint
Pour les EditTexts
ou les TextViews
modifiables, utilisez un attribut android:hint
pour indiquer le rôle du champ de texte. Vous ne devez pas utiliser d'attribut android:contentDescription
comme libellé de contenu pour des Views
modifiables.
android:labelFor
Utilisez un attribut android:labelFor
pour indiquer qu'une View
doit servir de libellé de contenu pour une autre View
.
Cas ne nécessitant pas de libellé de contenu
Dans certains cas, vous ne devez pas fournir de libellés de contenu de façon spécifique :
- Les textes rendus dans
TextView
(ou dans l'une de ses sous-classes) bénéficient automatiquement de services d'accessibilité. Des libellés de contenu supplémentaires sont généralement inutiles dans ce cas. - Les images décoratives ou les images ne comportant pas d'informations pertinentes sous forme graphique ne nécessitent pas de libellés de contenu. Dans de tels cas, définissez un attribut
android:contentDescription
avec la valeur"@null"
ou un attributandroid:importantForAccessibility
avec la valeur"no"
.
Pour en savoir plus, découvrez comment implémenter des libellés de contenu dans la formation des développeurs Android et les guides consacrés aux API.
Lorsque certains types de composables sont utilisés dans une interface, ils doivent contenir des libellés de contenu qui décrivent le rôle ou l'action associés à ces composables.
Fournir des libellés de contenu
Descriptions de contenu
Afin de fournir un libellé de contenu pour une Image
, une Icon
ou un autre composable de niveau inférieur transmettant des informations sous forme graphique, définissez la description de contenu.
- Un libellé de contenu peut dépendre d'informations d'exécution et la signification du composable peut changer. Par exemple, un bouton "Lecture" peut devenir un bouton "Pause" pendant la lecture de la musique.
- Dans de tels cas, utilisez l'état pour que Compose puisse observer les modifications de la description de contenu et la recomposer avec la nouvelle valeur. Découvrez comment utiliser l'état et Jetpack Compose.
- Dans certains cas, vous pouvez fusionner des éléments en un seul élément sélectionnable qui combine les libellés de contenu de ses éléments descendants. Découvrez comment fusionner des éléments.
Paramètre "label"
Certains composables, comme TextField
, acceptent un paramètre label
facultatif. Lorsque label
est défini, l'élément affiche le composable transmis à ce paramètre. Le composable ne peut pas être décrit à l'aide des services d'accessibilité.
Cas ne nécessitant pas de libellé de contenu
Dans certains cas, vous ne devez pas ajouter de libellés de contenu :
- Les textes rendus dans
Text
ou d'autres composables contenantText
bénéficient automatiquement de services d'accessibilité. - Les images décoratives ou les images ne comportant pas d'informations pertinentes sous forme graphique.
- Dans de tels cas, définissez le paramètre
contentDescription
ou la propriétéModifier.semantics#contentDescription
avec la valeurnull
ou appelezModifier#clearAndSetSemantics
.
- Dans de tels cas, définissez le paramètre
Conception
Lors de la conception d'une interface utilisateur, prenez le temps de réfléchir à la façon dont le contenu représenté graphiquement doit être libellé pour les utilisateurs de services d'accessibilité. Les libellés de contenu doivent respecter les principes suivants :
- Être concis et décrire clairement la signification ou l'action associées à l'élément
- Ne pas comporter le type ou l'état de l'élément
- Décrire l'action associée à l'élément plutôt que ce qu'il représente graphiquement si l'élément permet d'effectuer une action
- Ne pas donner d'instructions à l'utilisateur concernant la façon dont il doit interagir avec l'élément
Pour en savoir plus, consultez les consignes d'accessibilité Material Design relatives au texte.
Tests
Pour vérifier manuellement qu'il ne manque pas de libellés de contenu dans l'interface utilisateur d'une application :
- Activez TalkBack.
- Ouvrez l'application.
- Utilisez des gestes de navigation linéaire pour passer d'un élément au suivant sur l'écran.
- Si TalkBack sélectionne un élément sans en donner de description claire, ou le décrit comme "sans libellé", l'élément concerné ne possède probablement pas de libellé de contenu.
Les outils de test automatisés d'Android peuvent détecter les libellés de contenu manquants. Nous vous conseillons d'utiliser l'application Accessibility Scanner pour Android pour tester manuellement votre application sur un appareil. Vous pouvez effectuer des tests automatisés en activant la vérification de l'accessibilité dans Espresso et Robolectric.