Brugere af hjælpefunktionstjenester, f.eks. skærmlæsere, benytter indholdsetiketter for forstå meningen med elementerne i en grænseflade.
I nogle tilfælde, f.eks. når oplysningerne gengives grafisk i et element, kan indholdsetiketter give en tekstbeskrivelse af den betydning eller handling, der er tilknyttet elementet.
Hvis elementerne i en brugerflade ikke har indholdsetiketter, kan det være svært for nogle brugere at udføre handlinger i grænsefladen eller forstå de oplysninger, de præsenteres for.
Implementering
SeNår visse typer Views
bruges i en grænseflade, bør de omfatte indholdsetiketter, der beskriver det formål eller den handling, der er tilknyttet den pågældende View
.
Sådan viser du indholdsetiketter
android:contentDescription
Når du bruger en ImageView
, ImageButton
, CheckBox
eller en anden View
, der grafisk formidler oplysninger, skal du bruge attributten android:contentDescription
til at vise en indholdsetiket for den pågældende View
.
En indholdsetiket kan til tider være afhængig af oplysninger, der kun er tilgængelige på udløsningstidspunktet, og betydningen af en View
kan ændre sig over tid. En afspilningsknap kan f.eks. ændres til en pauseknap under afspilning af musik. I disse tilfælde skal du bruge View#setContentDescription(CharSequence contentDescription)
til at opdatere indholdsetiketten på det rigtige tidspunkt.
Når en hjælpefunktionstjeneste beskriver en ViewGroup
, kombinerer den normalt indholdsetiketter fra de underordnede Views
. Du kan tilsidesætte denne adfærd og angive, at du vil bruge din egen beskrivelse af elementet og dets ikke-fokuserbare underordnede Views
, ved at indstille en contentDescription
for den pågældende ViewGroup
. Du skal muligvis medtage indholdsetiketter fra underordnede Views
i en contentDescription
, når den er indstillet til en ViewGroup
.
android:hint
Hvis du bruger EditTexts
eller redigerbare TextViews
, skal du bruge attributten android:hint
til at angive formålet med tekstfeltet. Du bør ikke bruge android:contentDescription
som indholdsetiket til redigerbare Views
.
android:labelFor
Brug attributten android:labelFor
til at angive, at en View
skal fungere som indholdsetiket for en anden View
.
Tilfælde, hvor indholdsetiketter ikke er nødvendige
I visse tilfælde er det ikke nødvendigt at oprette indholdsetiketter:
- Tekst, der gengives i
TextView
(eller dennes underklasser), gives automatisk til hjælpefunktionstjenester. Yderligere indholdsetiketter er normalt unødvendige. - Dekorative billeder eller billeder, der ikke grafisk formidler meningsfulde oplysninger, kræver ikke indholdsetiketter. I disse tilfælde kan du angive
"@null"
for attributtenandroid:contentDescription
eller"no"
for attributtenandroid:importantForAccessibility
.
Du kan få flere oplysninger ved at læse om implementering af indholdsetiketter i Kurser i Android-udvikling og API-vejledninger.
Når visse typer sammensætninger bruges i en grænseflade, bør de omfatte indholdsetiketter, der beskriver det formål eller den handling, der er tilknyttet den pågældende sammensætning.
Sådan viser du indholdsetiketter
Indholdsbeskrivelser
Lav en indholdsbeskrivelse for at angive en indholdsetiket for Image
, Icon
eller en anden sammensætning på lavt niveau, som formidler grafisk information.
- En indholdsetiket kan være afhængig af oplysninger om kørselstid, og sammensætningens betydning kan muligvis ændres. En afspilningsknap kan f.eks. ændres til en pauseknap under afspilning af musik.
- I disse tilfælde kan du bruge State, så Compose kan registrere ændringer i indholdsbeskrivelsen og skrive den på ny med den nye værdi. Få flere oplysninger om, hvordan du bruger State og Jetpack Compose.
- I visse tilfælde kan du vælge at flette elementer til et enkelt fokuserbart element, som kombinerer indholdsetiketterne fra dets underordnede elementer. Få oplysninger om, hvordan du fletter elementer.
Etiketparameter
Visse sammensætninger, f.eks. TextField
, understøtter en valgfri label
-parameter. Når etiketten er angivet, viser elementet den sammensætning, der sendes til label
. Hjælpefunktionstjenester kan bruges til at beskrive sammensætningen.
Tilfælde, hvor indholdsetiketter ikke er nødvendige
I visse tilfælde bør indholdsetiketter ikke tilføjes:
- Tekst, der er gengivet i
Text
, eller andre sammensætninger, som indeholderText
, leveres automatisk til hjælpefunktionstjenester. - Dekorative billeder eller billeder, der ikke grafisk formidler meningsfulde oplysninger.
- I disse tilfælde skal parameteren
contentDescription
eller egenskabenModifier.semantics#contentDescription
angives tilnull
eller kaldeModifier#clearAndSetSemantics
.
- I disse tilfælde skal parameteren
Design
Når du designer en brugerflade, bør du grundigt overveje, hvordan grafisk repræsenteret indhold skal mærkes for brugere af hjælpefunktionstjenester. Indholdsetiketter bør følge disse principper:
- Vær kortfattet, og giv en klar beskrivelse af den betydning eller handling, der er tilknyttet elementet.
- Undgå at medtage elementets type eller status i indholdsetiketten.
- Hvis elementet er knyttet til en handling, skal du beskrive handlingen og ikke den grafiske repræsentation.
- Undgå at instruere brugeren i, hvordan han eller hun skal interagere med elementet.
Du kan få flere oplysninger ved at læse retningslinjer for skrivning i forbindelse med tilgængelighed i material design.
Test
Sådan verificerer du manuelt, at der ikke mangler indholdsetiketter i brugerfladen i en app:
- Slå TalkBack til.
- Åbn appen.
- Brug lineære navigationsbevægelser til at flytte tilgængelighedsfokus mellem elementerne på skærmen.
- Hvis TalkBack flytter fokus til et element, men ikke oplæser en meningsfuld repræsentation af det pågældende element, eller oplæser en meddelelse "uden etiket", mangler det pågældende element muligvis en indholdsetiket.
Androids automatiske testværktøjer kan registrere manglende indholdsetiketter. Overvej at bruge Accessibility Scanner til Android til at teste din app manuelt på enheden. Slå tilgængelighedskontrol til i Espresso og Robolectric i forbindelse med automatiske tests.