TalkBack — Googles inbyggda skärmläsare (screen reader) för Android, som ingår i paketet Android Accessibility Suite. Den läser upp gränssnittselement och gör det möjligt att styra enheten med gester, vilket ger blinda och synskadade användare full tillgång till smartphone-funktioner. Enligt Google Accessibility Help (2025) är TalkBack förinstallerat på de flesta Android-enheter och stöder över 30 språk med olika röstmotor.
Huvudpunkter
TalkBack — är en skärmläsare (screen reader) för Android, utvecklad av Google och en del av Android Accessibility Suite. Den ger röstfeedback och geststyrning för användare med synnedsättning. TalkBack kan fungera på både smartphones, surfplattor, Smart TV och bärbara enheter med Wear OS.
TalkBack första gången i Android 1.6 (Donut) 2009. Ursprungligen var det ett separat projekt, men med lanseringen av Android 4.0 (Ice Cream Sandwich) blev det en del av Android Accessibility Suite — en uppsättning tjänster som även inkluderar Switch Access och Select to Speak. Från och med Android 10 är TalkBack förinstallerat på alla enheter med Google Play-tjänster, inklusive enheter från partners — Samsung, Xiaomi, Oppo och andra.
TalkBack stöder över 30 språk med olika röstmotorer: Google Text-to-Speech, Samsung TTS och tredjepartsmotorer. För svenska används röstmotorn Google TTS som ger naturligt uttal och korrekt intonation. Användaren kan justera talhastighet, tonhöjd och välja röstens kön i TalkBack-inställningarna.
TalkBack fungerar baserat på tillgänglighetstjänsten (AccessibilityService) — en systemmekanism i Android som gör det möjligt för appar att få information om gränssnittets status och programmatiskt interagera med det. När TalkBack är aktiverat fångar det upp alla tryckhändelser och omvandlar dem till speciella skärmläsargester.
Nyckelelementet i TalkBacks funktion är tillgänglighetsfokus (accessibility focus). Till skillnad från standard inmatningsfokus, som är synligt som en markering av ett textfält, visas tillgänglighetsfokus som en gul ram runt elementet och är osynligt för användaren utan TalkBack. När tillgänglighetsfokus når ett element läser TalkBack upp dess innehåll, typ och status.
Användaren flyttar tillgänglighetsfokus med gester: svep åt höger — nästa element, svep åt vänster — föregående element. Elementen genomlöps i den ordning som bestäms av AccessibilityNodeInfo — tillgänglighetsträdet som Android bygger för varje skärm. Utvecklaren kan påverka ordningen genom egenskaperna accessibilityTraversalBefore och accessibilityTraversalAfter, vilket är särskilt viktigt för komplexa skärmar med anpassad layout.
Varje View på skärmen representeras av en nod i tillgänglighetsträdet — ett AccessibilityNodeInfo-objekt. Detta objekt innehåller: elementets text (contentDescription eller view-text), elementets typ (knapp, kryssruta, inmatningsfält), status (påslagen/avstängd/vald), position på skärmen och en lista över tillgängliga åtgärder. TalkBack går igenom detta träd och läser upp varje nod i genomgångsordning.
Om en View inte har något textinnehåll (t.ex. en ImageView utan beskrivning) blir den osynlig för TalkBack — användaren kommer inte att veta om dess existens. För att lösa detta problem ställer utvecklaren in contentDescription — en textbeskrivning som TalkBack uttalar istället för tystnad. Android stöder även stateDescription för element med ändringsbar status (vald/inte vald) och hintText för inmatningsfält med ledtråd.
TalkBack omvandlar standard Android-gester till speciella skärmläsargester. De flesta operationer utförs med ett eller två fingrar, och gester med tre fingrar är reserverade för globala åtgärder.
| Åtgärd | Gest | Resultat |
|---|---|---|
| Läs upp element | Tryck med 1 finger | Uttalar elementets namn och typ |
| Aktivera | Dubbeltryck | Tryck på knapp eller navigera |
| Nästa | Svep åt höger | Nästa element |
| Föregående | Svep åt vänster | Föregående element |
| Rulla | 2 fingrar svep | Rulla lista |
| TalkBack-meny | Svep uppåt-vänster | Global inställningsmeny |
Gest “svep uppåt-vänster” (L-format svep) öppnar TalkBacks globala meny där användaren kan ändra talhastighet, aktivera skärmgardin, starta handledningen eller öppna inställningar. TalkBack stöder även kontextmeny för element: svep uppåt-höger öppnar en lista över tillgängliga åtgärder för det aktuella elementet (t.ex. ”kopiera”, ”klistra in” för ett textfält eller ”ta bort” för ett chattmeddelande).
Android erbjuder ett rikt API för att konfigurera tillgänglighet. Grundnivån är contentDescription, men för kvalitativt stöd av TalkBack krävs arbete med AccessibilityNodeInfo, AccessibilityDelegate och LiveRegion.
Attributet android:contentDescription ställer in elementets textbeskrivning för TalkBack. Det är obligatoriskt för ImageView, ImageButton, FloatingActionButton och alla anpassade View-objekt utan textinnehåll. För standardelement (TextView, Button) är contentDescription valfritt — TalkBack läser texten automatiskt.
val avatarView = ImageView(this)
avatarView.contentDescription = "Användaravatar"
avatarView.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_YES
val playButton = ImageButton(this)
playButton.contentDescription = "Spela upp video"
val progressBar = ProgressBar(this)
progressBar.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_NO
Flaggan importantForAccessibility styr elementets synlighet för TalkBack. Värdet NO döljer elementet från tillgänglighetsträdet — användbart för dekorativa bilder, indikatorer och anpassade bakgrunder. Värdet YES tvingar in elementet i genomgången, även om det inte har någon text. Det är viktigt att inte missbruka NO: att dölja semantiskt viktiga element gör appen otillgänglig för TalkBack-användare.
För anpassade View-objekt som inte använder standardklickhanterare måste AccessibilityDelegate överskrivas — klassen som bearbetar tillgänglighetshändelser. Delegaten gör det möjligt att ställa in anpassad beskrivning, elementtyp och en lista över tillgängliga åtgärder som TalkBack kommer att erbjuda användaren via kontextmenyn.
class CustomButtonDelegate : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View, info: AccessibilityNodeInfoCompat
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.text = "Anpassad knapp"
info.className = Button::class.java.name
info.addAction(
AccessibilityNodeInfoCompat.AccessibilityActionCompat(
R.id.custom_action, "Dela"
)
)
}
override fun performAccessibilityAction(
host: View, action: Int, args: Bundle?
): Boolean {
if (action == R.id.custom_action) {
shareContent()
return true
}
return super.performAccessibilityAction(host, action, args)
}
}
I exemplet informerar delegaten TalkBack om att elementet är en knapp (className = Button) och tillhandahåller den anpassade åtgärden ”Dela“ som kommer att visas i TalkBacks kontextmeny. Metoden performAccessibilityAction bearbetar anropet av denna åtgärd. Utan delegat skulle TalkBack uppfatta den anpassade Viewen som ett enkelt område utan interaktivitet, och användaren skulle inte kunna interagera med den.
Fullständigt stöd för TalkBack inkluderar inte bara contentDescription, utan även fokushantering, LiveRegion för dynamiska uppdateringar, testning med påslagen skärmläsare och anpassning till olika Android-versioner.
När skärminnehållet ändras utan uttrycklig åtgärd från användaren (t.ex. ett meddelande om nytt meddelande visas eller like-räknaren uppdateras), måste TalkBack få en notifiering. För detta används attributet android:accessibilityLiveRegion för View i XML eller metoden setAccessibilityLiveRegion() i kod. Värdet polite lägger till ett meddelande efter att den aktuella uppläsningen är klar, medan värdet assertive avbryter den omedelbart.
val statusText = TextView(this)
statusText.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_POLITE
// När text uppdateras kommer TalkBack automatiskt
// meddela ändringen
statusText.text = "Nytt meddelande från Anna"
// För kritiska meddelanden — assertive
errorBanner.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_ASSERTIVE
LiveRegion är motsvarigheten till UIAccessibility.post på iOS. Använd polite för de flesta uppdateringar (nya meddelanden, statusuppdatering) och assertive endast för kritiska fel (misslyckad betalning, förlorad anslutning). Överdriven användning av assertive skapar en negativ användarupplevelse — TalkBack kommer ständigt att avbryta den aktuella uppläsningen.
För komplexa skärmar där flera View-objekt bildar en logisk enhet används AccessibilityNodeProvider eller focusSearch för att åsidosätta navigering. Till exempel bör en anpassad kalender med 42 celler (6 veckor × 7 dagar) inte tvinga användaren att bläddra igenom alla 42 element för att komma till nästa block. Utvecklaren kan kombinera celler i logiska grupper: månad → vecka → dag.
För Jetpack Compose används modifieraren .semantics {}, som erbjuder ett liknande API: contentDescription, liveRegion, stateDescription, disabled och customActions. Compose stöder även mergeDescendants för att slå ihop barnsemantik till en, vilket förenklar gruppering av element utan manuell konfiguration av accessibilityDelegate för varje View.
Button(
onClick = { sendMessage() },
modifier = Modifier.semantics {
contentDescription("Skicka meddelande")
stateDescription("Redo att skickas")
}
) {
Icon(Icons.Filled.Send, "Skicka")
}
Testning av TalkBack görs via en fysisk enhet eller emulator med aktiverad tjänst. Det rekommenderas att gå igenom viktiga användarscenarier med avstängd skärm (Screen Curtain) — detta simulerar fullständig avsaknad av visuell feedback. Android erbjuder även Accessibility Scanner — ett verktyg för automatisk upptäckt av tillgänglighetsproblem som markerar element utan contentDescription, för små tryckområden och låg kontrast.
Vanliga frågor
Inställningar → Tillgänglighet → TalkBack → Aktivera. För snabb aktivering används samtidig tryckning av båda volymknapparna i 3 sekunder. Google Assistant kan även aktivera TalkBack med röstkommandot ”Aktivera TalkBack“.
TalkBack är skärmläsare för Android, VoiceOver är för iOS. TalkBack använder AccessibilityService och tillgänglighetsfokus med gul ram, medan VoiceOver använder UIAccessibility och rotor. Gester och menyer skiljer sig åt: TalkBack har L-format svep för global meny.
Ställ in contentDescription för alla ImageView och anpassade element. Använd importantForAccessibility för att dölja dekorativa element. Konfigurera accessibilityLiveRegion för dynamiska uppdateringar och kontrollera via Accessibility Scanner. I Compose, använd modifieraren .semantics{}.
Det är ett objekt som representerar ett gränssnittselement i tillgänglighetsträdet. Innehåller text, typ, status, position och lista över åtgärder. TalkBack går igenom detta träd för navigering. Utvecklaren kan ändra det via AccessibilityDelegate eller attribut i XML.
Kontrollera importantForAccessibility — det kan vara inställt på NO. Säkerställ att contentDescription är inställt för element utan text. För anpassade View-objekt, implementera AccessibilityDelegate med onInitializeAccessibilityNodeInfo. Använd Accessibility Scanner för diagnos.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också