TalkBack — vestavěná čtečka obrazovky (screen reader) od Google pro Android, která je součástí balíčku Android Accessibility Suite. Hlasitě přeříkává prvky rozhraní a umožňuje ovládání zařízení pomocí gest, poskytuje nevidomým a slabozrakým uživatelům plný přístup k funkcím smartphonu. Podle Google Accessibility Help (2025) je TalkBack předinstalován na většině zařízení Android a podporuje více než 30 jazyků s různými hlasovými motory.
Hlavní body
TalkBack — je čtečka obrazovky (screen reader) pro Android, vyvinutá společností Google a součást Android Accessibility Suite. Poskytuje hlasovou zpětnou vazbu a ovládání gesty pro uživatele s poruchami zraku. TalkBack může fungovat na chytrých telefonech, tabletech, Smart TV a nositelných zařízeních s Wear OS.
TalkBack se poprvé objevil v Android 1.6 (Donut) v roce 2009. Původně to byl samostatný projekt, ale s vydáním Android 4.0 (Ice Cream Sandwich) se stal součástí Android Accessibility Suite — sady služeb, která zahrnuje také Switch Access a Select to Speak. Od Android 10 je TalkBack předinstalován na všech zařízeních se službami Google Play, včetně zařízení partnerů — Samsung, Xiaomi, Oppo a dalších.
TalkBack podporuje více než 30 jazyků s různými hlasovými motory: Google Text-to-Speech, Samsung TTS a externími. Pro češtinu se používá hlasový motor Google TTS, který zajišťuje přirozenou výslovnost a správnou intonaci. Uživatel může nastavit rychlost řeči, výšku tónu a vybrat pohlaví hlasu v nastavení TalkBack.
TalkBack funguje na základě služby přístupnosti (AccessibilityService) — systémového mechanismu Android, který umožňuje aplikacím získávat informace o stavu rozhraní a programově s ním interagovat. Když je TalkBack zapnutý, zachycuje všechny dotykové události a převádí je na speciální gesta čtečky obrazovky.
Klíčovým prvkem fungování TalkBack je fokus přístupnosti (accessibility focus). Na rozdíl od standardního fokusu vstupu, který je viditelný jako zvýraznění textového pole, se fokus přístupnosti zobrazuje jako žlutý rámeček kolem prvku a je neviditelný pro uživatele bez TalkBack. Když fokus přístupnosti dopadne na prvek, TalkBack přeříkává jeho obsah, typ a stav.
Uživatel přesouvá fokus přístupnosti gesty: přetažení doprava — další prvek, přetažení doleva — předchozí prvek. Prvky se procházejí v pořadí určeném AccessibilityNodeInfo — stromem přístupnosti, který Android vytváří pro každou obrazovku. Vývojář může ovlivnit pořadí pomocí vlastností accessibilityTraversalBefore a accessibilityTraversalAfter, což je důležité zejména pro složité obrazovky s vlastním rozložením.
Každý View na obrazovce je reprezentován uzlem ve stromu přístupnosti — objektem AccessibilityNodeInfo. Tento objekt obsahuje: text prvku (contentDescription nebo text view), typ prvku (tlačítko, zaškrtávací políčko, vstupní pole), stav (zapnuto/vypnuto/vybráno), pozici na obrazovce a seznam dostupných akcí. TalkBack prochází tento strom a přeříkává každý uzel v pořadí procházení.
Pokud View nemá textový obsah (např. ImageView bez popisu), stává se neviditelným pro TalkBack — uživatel se o jeho existenci nedozví. K vyřešení tohoto problému vývojář nastaví contentDescription — textový popis, který TalkBack vysloví místo ticha. Android také podporuje stateDescription pro prvky s měnitelným stavem (vybráno/nevybráno) a hintText pro vstupní pole s nápovědou.
TalkBack převádí standardní Android gesta na speciální gesta čtečky obrazovky. Většina operací se provádí jedním nebo dvěma prsty, přičemž gesta třemi prsty jsou vyhrazena pro globální akce.
| Akce | Gesto | Výsledek |
|---|---|---|
| Přeříknout prvek | Dotyč 1 prstem | Vysloví název a typ prvku |
| Aktivovat | Dvojitý dotyk | Stisknutí tlačítka nebo přechod |
| Další | Přetažení doprava | Další prvek |
| Předchozí | Přetažení doleva | Předchozí prvek |
| Posouvání | 2 prsty přetažení | Posouvání seznamu |
| Menu TalkBack | Přetažení nahoru-doleva | Globální menu nastavení |
Gesto „přetažení nahoru-doleva" (přetažení ve tvaru L) otevře globální menu TalkBack, kde uživatel může změnit rychlost řeči, zapnout závěs obrazovky, spustit tutoriál nebo otevřít nastavení. TalkBack také podporuje kontextové menu pro prvky: přetažení nahoru-doprava otevře seznam dostupných akcí pro aktuální prvek (například „kopírovat", „vložit" pro textové pole nebo „smazat" pro zprávu v chatu).
Android poskytuje bohaté API pro nastavení přístupnosti. Základní úrovní je contentDescription, ale pro kvalitní podporu TalkBack je vyžadována práce s AccessibilityNodeInfo, AccessibilityDelegate a LiveRegion.
Atribut android:contentDescription nastavuje textový popis prvku pro TalkBack. Je povinný pro ImageView, ImageButton, FloatingActionButton a všechna vlastní View bez textového obsahu. Pro standardní prvky (TextView, Button) je contentDescription volitelný — TalkBack přečte text automaticky.
val avatarView = ImageView(this)
avatarView.contentDescription = "Avatar uživatele"
avatarView.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_YES
val playButton = ImageButton(this)
playButton.contentDescription = "Přehrát video"
val progressBar = ProgressBar(this)
progressBar.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_NO
Příznak importantForAccessibility řídí viditelnost prvku pro TalkBack. Hodnota NO skryje prvek ze stromu přístupnosti — užitečné pro dekorativní obrázky, indikátory a vlastní pozadí. Hodnota YES vynuceně zahrne prvek do procházení, i když nemá text. Důležité je nezneužívat NO: skrývání sémanticky důležitých prvků činí aplikaci nepřístupnou pro uživatele TalkBack.
Pro vlastní View, která nepoužívají standardní obsluhu kliknutí, je třeba přepsat AccessibilityDelegate — třídu zpracovávající události přístupnosti. Delegát umožňuje nastavit vlastní popis, typ prvku a seznam dostupných akcí, které TalkBack nabídne uživateli prostřednictvím kontextového menu.
class CustomButtonDelegate : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View, info: AccessibilityNodeInfoCompat
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.text = "Vlastní tlačítko"
info.className = Button::class.java.name
info.addAction(
AccessibilityNodeInfoCompat.AccessibilityActionCompat(
R.id.custom_action, "Sdílet"
)
)
}
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)
}
}
V příkladu delegát informuje TalkBack, že prvek je tlačítko (className = Button) a poskytuje vlastní akci „Sdílet", která se zobrazí v kontextovém menu TalkBack. Metoda performAccessibilityAction zpracovává volání této akce. Bez delegátu by TalkBack vnímal vlastní View jako jednoduchou oblast bez interaktivity a uživatel by s ním nemohl interagovat.
Plná podpora TalkBack zahrnuje nejen contentDescription, ale také správu fokusu, LiveRegion pro dynamické aktualizace, testování se zapnutou čtečkou obrazovky a přizpůsobení různým verzím Android.
Když se obsah obrazovky mění bez výslovné akce uživatele (např. se objeví oznámení o nové zprávě nebo se aktualizuje počítadlo lajků), TalkBack by měl obdržet oznámení. K tomu se používá atribut android:accessibilityLiveRegion pro View v XML nebo metoda setAccessibilityLiveRegion() v kódu. Hodnota polite přidá oznámení po dokončení aktuálního přeříkávání, zatímco hodnota assertive jej okamžitě přeruší.
val statusText = TextView(this)
statusText.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_POLITE
// Při aktualizaci textu TalkBack automaticky
// oznámí změnu
statusText.text = "Nová zpráva od Anny"
// Pro kritická oznámení — assertive
errorBanner.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_ASSERTIVE
LiveRegion je ekvivalent UIAccessibility.post na iOS. Používejte polite pro většinu aktualizací (nové zprávy, aktualizace stavu) a assertive pouze pro kritické chyby (neúspěšná platba, ztráta připojení). Nadměrné používání assertive vytváří negativní uživatelskou zkušenost — TalkBack bude neustále přerušovat aktuální přeříkávání.
Pro složité obrazovky, kde několik View tvoří jednu logickou jednotku, se používá AccessibilityNodeProvider nebo focusSearch pro přepsání navigace. Například vlastní kalendář se 42 buňkami (6 týdnů × 7 dní) by neměl nutit uživatele procházet všech 42 prvků, aby se dostal k dalšímu bloku. Vývojář může buňky spojit do logických skupin: měsíc → týden → den.
Pro Jetpack Compose se používá modifikátor .semantics {}, který poskytuje podobné API: contentDescription, liveRegion, stateDescription, disabled a customActions. Compose také podporuje mergeDescendants pro sloučení dětských sémantik do jedné, což zjednodušuje seskupování prvků bez ručního nastavení accessibilityDelegate pro každé View.
Button(
onClick = { sendMessage() },
modifier = Modifier.semantics {
contentDescription("Odeslat zprávu")
stateDescription("Připraveno k odeslání")
}
) {
Icon(Icons.Filled.Send, "Odeslat")
}
Testování TalkBack se provádí pomocí fyzického zařízení nebo emulátoru se zapnutou službou. Doporučuje se projít klíčové uživatelské scénáře s vypnutou obrazovkou (Screen Curtain) — to simuluje úplnou absenci vizuální zpětné vazby. Android také poskytuje Accessibility Scanner — nástroj pro automatické odhalování problémů přístupnosti, který zvýrazňuje prvky bez contentDescription, příliš malé dotykové oblasti a nízký kontrast.
Často kladené otázky
Nastavení → Přístupnost → TalkBack → Zapnout. Pro rychlé zapnutí se používá současné stisknutí obou tlačítek hlasitosti na 3 sekundy. Google Assistant může také zapnout TalkBack hlasovým příkazem „Zapni TalkBack".
TalkBack je čtečka obrazovky pro Android, VoiceOver pro iOS. TalkBack používá AccessibilityService a fokus přístupnosti se žlutým rámečkem, zatímco VoiceOver používá UIAccessibility a rotor. Gesta a menu se liší: TalkBack má přetažení ve tvaru L pro globální menu.
Nastavte contentDescription pro všechny ImageView a vlastní prvky. Použijte importantForAccessibility pro skrytí dekorativních prvků. Nakonfigurujte accessibilityLiveRegion pro dynamické aktualizace a zkontrolujte pomocí Accessibility Scanner. V Compose aplikujte modifikátor .semantics{}.
Je to objekt reprezentující prvek rozhraní ve stromu přístupnosti. Obsahuje text, typ, stav, pozici a seznam akcí. TalkBack prochází tento strom pro navigaci. Vývojář jej může měnit přes AccessibilityDelegate nebo atributy v XML.
Zkontrolujte importantForAccessibility — možná je nastaveno na NO. Ujistěte se, že contentDescription je nastaveno pro prvky bez textu. Pro vlastní View implementujte AccessibilityDelegate s onInitializeAccessibilityNodeInfo. Použijte Accessibility Scanner pro diagnostiku.
Souhrn
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také