De som använder tillgänglighetsfunktioner, till exempel skärmläsare, förlitar sig på innehållsetiketter för att förstå vad elementen i ett gränssnitt betyder.
I vissa fall, till exempel när information förmedlas grafiskt inom ett element, kan innehållsetiketter ge en textbeskrivning av den innebörd eller åtgärd som är associerad med elementet.
Om element i ett användargränssnitt inte tillhandahåller innehållsetiketter kan det vara svårt för vissa användare att förstå informationen som presenteras för dem eller utföra åtgärder i gränssnittet.
Implementering
VisaNär vissa typer av View
-objekt används i ett gränssnitt bör de tillhandahålla innehållsetiketter som beskriver syftet eller åtgärden som är associerad med View
-objektet.
Så här tillhandahåller du innehållsetiketter
android:contentDescription
När du använder ImageView
, ImageButton
, CheckBox
eller ett annat View
-objekt som förmedlar grafisk information använder du attributet android:contentDescription
för att ge View
-objektet en innehållsetikett.
En innehållsetikett beror ibland på information som endast finns vid körning eller också kan betydelsen av ett View
-objekt variera över tid. Till exempel kan en uppspelningsknapp ändras till en pausknapp under uppspelning av musik. I dessa fall använder du View#setContentDescription(CharSequence contentDescription)
för att uppdatera innehållsetiketten vid lämplig tidpunkt.
När en tillgänglighetstjänst beskriver en ViewGroup
kombinerar den vanligen innehållsetiketter från underordnade View
-objekt. Om du vill åsidosätta det här beteendet och ange att du vill tillhandahålla en egen beskrivning av objektet och dess icke-fokuserbara underordnade View
-objekt anger du en contentDescription
på ViewGroup
-objektet. Du kanske behöver inkludera innehållsetiketter från underordnade View
-objekt i en contentDescription
när de anges på ett ViewGroup
-objekt.
android:hint
För EditText
- eller redigerbara TextView
-objekt anger du textfältets syfte med attributet android:hint
. En android:contentDescription
bör inte användas som en innehållsetikett för redigerbara View
-objekt.
android:labelFor
Använd attributet android:labelFor
för att ange att ett View
-objekt ska fungera som innehållsetikett för ett annat View
-objekt.
Fall som inte kräver innehållsetiketter
I vissa fall ska innehållsetiketter inte anges specifikt:
- Text som återges i
TextView
(eller dess subklasser) tillhandahålls automatiskt till tillgänglighetstjänster. Ytterligare innehållsetiketter behövs vanligen inte. - Dekorativa bilder eller bilder som inte förmedlar meningsfull information grafiskt kräver inte innehållsetiketter. I de här fallen anger du ett
android:contentDescription
-attribut som"@null"
eller ettandroid:importantForAccessibility
-attribut som"no"
.
Om du vill veta mer kan du läsa om implementering av innehålletiketter i utvecklarinformationen för Android och API-guiderna.
När vissa typer av Composable-objekt används i ett gränssnitt bör de tillhandahålla innehållsetiketter som beskriver syftet eller åtgärden som är associerad med Composable-objektet.
Så här tillhandahåller du innehållsetiketter
Innehållsbeskrivningar
Ange innehållsbeskrivningen om du vill tillhandahålla en innehållsetikett för Image
, Icon
eller ett annat Composable-objekt på låg nivå som förmedlar grafisk information.
- En innehållsetikett kan vara beroende av körningsinformation och betydelsen för Composable-objektet kan ändras. Till exempel kan en uppspelningsknapp ändras till en pausknapp under uppspelning av musik.
- I de här fallen ska du använda State så att Compose kan observera ändringar av innehållsbeskrivningen och skriva om den med det nya värdet. Läs mer om att använda State och Jetpack Compose.
- I vissa fall vill du kanske sammanfoga element i ett element som det går att fokusera på och som samlar innehållsetiketterna från de underordnade elementen. Läs mer om att sammanfoga element.
Etikettparameter
Vissa Composables-objekt, som TextField
, har stöd för en valfri label
-parameter. När etiketten har angetts visar elementet det Composable-objekt som har överförts till label
. Det går att använda tillgänglighetstjänster för att beskriva Composable-objektet.
Fall som inte kräver innehållsetiketter
I vissa fall bör innehållsetiketter inte läggas till:
- Text som återges i
Text
, eller andra Composables-objekt som innehållerText
, tillhandahålls automatiskt för tillgänglighetstjänster. - Dekorativa bilder eller bilder som inte förmedlar meningsfull information grafiskt.
- I de här fallen ska parametern
contentDescription
eller egenskapenModifier.semantics#contentDescription
ställas in pånull
eller anropaModifier#clearAndSetSemantics
.
- I de här fallen ska parametern
Design
Vid utformningen av ett användargränssnitt ska du tänka noga på hur grafiskt representerat innehåll bör märkas för användare av tillgänglighetstjänster. Innehållsetiketterna bör följa de här principerna:
- Var kortfattad och beskriv tydligt den innebörd eller åtgärd som är associerad med ett element.
- Inkludera inte elementets typ eller tillstånd i innehållsetiketten.
- Om elementet är associerat med en åtgärd beskriver du åtgärden, inte den grafiska representationen.
- Ge inte användarna anvisningar för hur de specifikt interagerar med elementet.
Mer information finns i tillgänglighetsskrivguiden för Material Design.
Testning
Så här verifierar du manuellt att användargränssnittet i en app inte saknar innehållsetiketter:
- Aktivera TalkBack.
- Öppna appen.
- Flytta tillgänglighetsfokus till varje element på skärmen med linjära navigeringsgester.
- Om TalkBack flyttar fokus till ett visst element, men inte läser upp en meningsfull representation av det elementet eller läser upp meddelandet ”utan etikett”, kan det hända att elementet saknar en innehållsetikett.
Androids automatiserade testverktyg kan upptäcka saknade innehållsetiketter. Vi rekommenderar att du använder tillgångstestaren för Android för att testa appen manuellt på enheten. För automatiska tester kan du aktivera tillgänglighetskontrollerna i Espresso och Robolectric.