Gli utenti dei servizi di accessibilità, come ad esempio gli screen reader, si affidano alle etichette dei contenuti per capire il significato degli elementi in un'interfaccia.
In alcuni casi, ad esempio quando le informazioni hanno una veste grafica all'interno di un elemento, le etichette dei contenuti possono fornire una descrizione testuale dell'azione o del significato associati all'elemento.
Se non esistono etichette dei contenuti per gli elementi di un'interfaccia, alcuni utenti potrebbero avere difficoltà a comprendere le informazioni fornite o a compiere azioni nell'interfaccia.
Implementazione
ViewAlcuni tipi di elementi View
utilizzati in un'interfaccia dovrebbero fornire etichette dei contenuti che descrivano l'azione o lo scopo associati all'elemento View
specifico.
Come fornire etichette dei contenuti
android:contentDescription
Se utilizzi ImageView
, ImageButton
, CheckBox
o un altro elemento View
che comunica le informazioni graficamente, aggiungi un attributo android:contentDescription
per specificare un'etichetta dei contenuti per elemento View
.
A volte un'etichetta dei contenuti dipende dalle informazioni disponibili soltanto in fase di runtime, oppure il significato di un elemento View
potrebbe cambiare nel tempo. Ad esempio, un pulsante Riproduci potrebbe diventare un pulsante Pausa durante la riproduzione di musica. In questi casi, utilizza View#setContentDescription(CharSequence contentDescription)
per aggiornare l'etichetta dei contenuti al momento opportuno.
In genere, quando un servizio di accessibilità descrive un elemento ViewGroup
, combina le etichette dei contenuti dei relativi elementi View
secondari. Per eseguire l'override di questo comportamento e indicare che vuoi fornire una descrizione personalizzata dell'elemento e dei relativi elementi View
secondari non attivabili, imposta un attributo contentDescription
nell'elemento ViewGroup
. Durante l'impostazione di un elemento ViewGroup
potrebbe essere necessario includere le etichette dei contenuti degli elementi View
secondari all'interno di un elemento contentDescription
.
android:hint
Per gli elementi EditText
o TextView
modificabili, utilizza un attributo android:hint
per indicare lo scopo del campo di testo. Non utilizzare un elemento android:contentDescription
come etichetta dei contenuti per gli elementi View
modificabili.
android:labelFor
Utilizza un attributo android:labelFor
per indicare che un elemento View
deve avere la funzione di etichetta dei contenuti per un altro elemento View
.
Casi che non richiedono etichette dei contenuti
In alcuni casi non è necessario fornire espressamente le etichette dei contenuti. Ecco quali:
- Il testo visualizzato in
TextView
(o nelle relative sottoclassi) viene fornito automaticamente ai servizi di accessibilità. In genere non sono necessarie altre etichette dei contenuti. - Le immagini decorative o che non rappresentano graficamente delle informazioni significative non richiedono le etichette dei contenuti. In questi casi, imposta un attributo
android:contentDescription
con valore"@null"
o un attributoandroid:importantForAccessibility
con valore"no"
.
Leggi ulteriori informazioni sull'implementazione delle etichette dei contenuti nel corso di formazione per sviluppatori Android e nelle guide alle API.
Alcuni tipi di elementi componibili utilizzati in un'interfaccia dovrebbero includere etichette dei contenuti che descrivano l'azione o lo scopo associati all'elemento componibile specifico.
Come fornire etichette dei contenuti
Descrizioni dei contenuti
Per fornire un'etichetta dei contenuti per Image
, Icon
o un altro componibile di basso livello che trasmette informazioni grafiche, imposta la descrizione dei contenuti.
- Un'etichetta dei contenuti può dipendere dalle informazioni di runtime e il significato del componibile potrebbe cambiare. Ad esempio, un pulsante Riproduci potrebbe diventare un pulsante Pausa durante la riproduzione di musica.
- In questi casi, utilizza lo stato in modo che Compose possa osservare le modifiche nella descrizione del contenuto e ricomporlo con il nuovo valore. Scopri come usare State e Jetpack Compose.
- In alcuni casi, è possibile che tu voglia unire gli elementi in un singolo elemento focalizzabile che combina le etichette dei contenuti degli elementi da cui deriva. Scopri come unire gli elementi.
Parametro etichetta
Alcuni componibili, come TextField
, supportano un parametro facoltativo label
. Quando l'etichetta è impostata, l'elemento visualizza il componibile trasferito in label
. È possibile utilizzare i servizi di accessibilità per descrivere il componibile.
Casi che non richiedono etichette dei contenuti
In alcuni casi non è necessario aggiungere le etichette dei contenuti. Ecco quali:
- Il testo reso in
Text
o altri componenti componibili che contengonoText
vengono forniti automaticamente ai servizi di accessibilità. - Immagini decorative o che non rappresentano graficamente delle informazioni significative.
- In questi casi, imposta il parametro
contentDescription
oModifier.semantics#contentDescription
sunull
, oppure invocaModifier#clearAndSetSemantics
.
- In questi casi, imposta il parametro
Design
Durante la progettazione di un'interfaccia utente è bene valutare con cura che tipo di etichette utilizzare per i contenuti rappresentati graficamente da fornire agli utenti dei servizi di accessibilità. Le etichette dei contenuti dovrebbero rispettare i seguenti principi:
- Essere concise e descrivere in modo chiaro l'azione o il significato associati a un elemento.
- Non includere lo stato o il tipo di elemento.
- Se l'elemento è associato a un'azione, descrivere l'azione e non la rappresentazione grafica.
- Non spiegare all'utente come interagire specificamente con l'elemento.
Per scoprire di più, leggi le linee guida per la scrittura di testo di accessibilità di Material Design.
Test
Per verificare manualmente che nell'interfaccia utente di un'app siano presenti tutte le etichette dei contenuti, procedi nel seguente modo:
- Attiva TalkBack.
- Apri l'app.
- Utilizza i gesti di navigazione lineare per spostare lo stato attivo dell'accessibilità su ogni elemento visualizzato sullo schermo.
- Se TalkBack sposta lo stato attivo su qualche elemento senza pronunciarne una descrizione significativa o pronunciando un messaggio "senza etichetta", significa che l'elemento in questione potrebbe non avere un'etichetta dei contenuti.
Gli strumenti per i test automatici di Android sono in grado di rilevare le etichette dei contenuti mancanti. Valuta se utilizzare Accessibility Scanner per Android per testare manualmente l'app sul dispositivo. Per eseguire test automatici, attiva il controllo dell'accessibilità in Espresso e Robolectric.