Screen Reader (čtečka obrazovky) — program, který převádí text a grafické prvky rozhraní na řeč nebo výstup na Braillův displej, což umožňuje nevidomým a slabozrakým uživatelům interakci se zařízením bez vizuální kontroly. Na mobilních platformách jsou hlavními čtečkami obrazovky VoiceOver na iOS a TalkBack na Androidu. Podle údajů Světové zdravotnické organizace (2023) je Screen Reader hlavním nástrojem přístupu k digitálním technologiím pro 285 milionů lidí se zrakovým postižením na světě.
Hlavní body
Screen Reader (čtečka obrazovky) — je asistenční technologie (Assistive Technology, AT), která interpretuje grafické uživatelské rozhraní a prezentuje jej v neviditelné formě: prostřednictvím syntetizované řeči nebo hmatového Braillova displeje. Čtečky obrazovky jsou hlavním prostředkem přístupu k počítačům a mobilním zařízením pro osoby s úplnou nebo částečnou ztrátou zraku.
První čtečky obrazovky se objevily na konci 80. let 20. století pro MS-DOS (např. Vocal-Eyes) a později pro Windows (JAWS, NVDA). Na mobilních platformách se čtečky obrazovky začaly zabudovávat na systémové úrovni: Apple integroval VoiceOver do iPhone 3GS v roce 2009, Google integroval TalkBack do Androidu 1.6 ve stejném roce. Do roku 2025 má téměř každý moderní smartphone vestavěnou čtečku obrazovky, která nevyžaduje instalaci dalšího softwaru.
Screen Reader nejen čte text z obrazovky — analyzuje hierarchii rozhraní, určuje typy prvků (tlačítko, odkaz, nadpis, vstupní pole), jejich stav (zapnuto/vypnuto, vybráno/nevybráno) a vzájemné vztahy (rodič-dítě, skupina). Tato informace je předávána uživateli prostřednictvím hlasových pokynů nebo hmatových vjemů Braillova displeje, který aktualizuje buňky v reálném čase podle polohy fokusu.
Screen Reader pracuje v těsné součinnosti s operačním systémem a získává přístup k jeho vnitřní reprezentaci rozhraní — stromu přístupnosti (Accessibility Tree). Tento mechanismus je stejný na iOS i Androidu, i když názvy API se liší.
Hlavním výstupním kanálem čtečky obrazovky je syntezátor řeči (Text-To-Speech, TTS). Když fokus přístupnosti dopadne na prvek, čtečka obrazovky extrahuje jeho textový obsah (nebo popis zadaný vývojářem) a odešle jej do TTS enginu. Moderní TTS enginy, jako Apple Speech Synthesis a Google Text-to-Speech, používají neuronové sítě k vytváření přirozené řeči se správnou intonací, pauzami a přízvuky v závislosti na interpunkci a typu obsahu.
Uživatel může nastavit rychlost řeči (obvykle 60–80 % maxima pro pohodlné vnímání), výšku tónu a hlasitost. Některé čtečky obrazovky podporují více hlasů a přepínání mezi nimi v závislosti na typu obsahu — například pomalejší hlas pro čtení textu a rychlý pro navigaci v rozhraní. Braillovy displeje se připojují přes Bluetooth a zobrazují 40–80 znaků najednou, přičemž řádek se aktualizuje při každé změně fokusu.
Čtečka obrazovky používá koncept fokusu přístupnosti (Accessibility Focus), který se liší od standardního vstupního fokusu. Uživatel přesouvá fokus přístupnosti pomocí gest (dotyk, tažení) a čtečka obrazovky vysloví prvek pod fokusem. Pořadí navigace ve výchozím nastavení sleduje vizuální pořadí: zleva doprava, shora dolů. Vývojář může toto pořadí přepsat pro složitá rozvržení.
Čtečka obrazovky také podporuje různé režimy navigace, které uživatel přepíná pomocí rotoru (VoiceOver) nebo menu (TalkBack): podle nadpisů, odkazů, znaků, slov, formulářů. V režimu nadpisů se čtečka obrazovky pohybuje pouze mezi H1-H6 — to je kriticky důležité pro efektivní navigaci na dlouhých stránkách a v dokumentech. Režim znaků pomáhá při zadávání potvrzovacích kódů nebo složitých hesel tím, že každý znak vyslovuje samostatně.
Na mobilních platformách dominují dvě čtečky obrazovky: VoiceOver na iOS a TalkBack na Androidu. Mají různá API, gesta a možnosti, ale společný princip fungování — čtení stromu přístupnosti a ovládání gesty.
VoiceOver — čtečka obrazovky od Apple, zabudovaná do iOS, iPadOS a macOS. Používá API UIAccessibility k získávání informací o prvcích a podporuje rotor pro přepínání režimů navigace. VoiceOver je integrován s iCloud (nastavení se synchronizují mezi zařízeními), Apple Pay (potvrzení platby přes Touch ID nebo Face ID) a dynamickým textem (písmo se přizpůsobuje uživatelským nastavením).
Gesta VoiceOver se liší od TalkBack: používá se rotace dvěma prsty (rotor), trojité klepnutí pro Screen Curtain a dvojité klepnutí dvěma prsty pro zrušení akce. VoiceOver podporuje vlastní rotory, které vývojář přidává prostřednictvím UIAccessibilityCustomRotor — například pro rychlou navigaci po sekcích aplikace obcházející standardní pořadí.
TalkBack — čtečka obrazovky od Google, součást Android Accessibility Suite. Používá AccessibilityService a AccessibilityNodeInfo pro přístup k rozhraní. TalkBack podporuje globální menu pomocí tažení ve tvaru písmene L, vlastní akce pro prvky a LiveRegion pro dynamické aktualizace. Počínaje Androidem 14 získal TalkBack podporu gest jednou rukou a vylepšenou integraci s Google Assistant.
TalkBack má flexibilnější systém gest než VoiceOver: uživatel může přiřadit téměř jakékoli gesto k jakékoli akci. TalkBack také podporuje Braillovo zadávání na obrazovce (BrailleBack) — uživatel zadává text Braillovými znaky přímo na dotykové obrazovce ve speciálním rozložení 3×2 pro každý prst, což výrazně zrychluje psaní ve srovnání s obrazovkovou klávesnicí.
| Vlastnost | VoiceOver (iOS) | TalkBack (Android) |
|---|---|---|
| API | UIAccessibility | AccessibilityService |
| Navigace | Rotor (2 prsty) | Globální menu (L-tažení) |
| Jazyky | 40+ | 30+ |
| Vlastní akce | UIAccessibilityCustomRotor | AccessibilityDelegate |
| Braillovo písmo | Externí displeje | BrailleBack + externí |
| Dynamické aktualizace | UIAccessibility.post | accessibilityLiveRegion |
Kromě VoiceOver a TalkBack existují méně rozšířené mobilní čtečky obrazovky: Select to Speak (Android, předčítání vybrané oblasti), Samsung Voice Assistant (náhrada TalkBack na zařízeních Samsung s One UI) a řešení třetích stran pro specifické niky — například pro uživatele čínských smartphonů bez služeb Google.
Screen Reader nemá přímý přístup ke komponentám UI aplikace. Místo toho pracuje přes mezivrstvu — API přístupnosti operačního systému. Operační systém vytváří strom přístupnosti (Accessibility Tree), který čtečka obrazovky prochází a analyzuje.
Na iOS se strom přístupnosti vytváří z objektů UIAccessibilityElement, které odpovídají každému View na obrazovce. Každý prvek obsahuje label (hlavní text), traits (typ prvku: tlačítko, nadpis, odkaz), hint (nápověda), value (aktuální hodnota pro posuvníky a indikátory) a frame (oblast dotyku). Systém automaticky vytváří prvky pro standardní UI komponenty, ale vývojář je může přidávat a konfigurovat.
Na Androidu se strom přístupnosti vytváří z objektů AccessibilityNodeInfo. Každý uzel obsahuje: text (text nebo contentDescription), className (typ prvku), contentDescription (popis), stateDescription (stav), isEnabled, isChecked, isClickable a další příznaky. Android také podporuje AccessibilityAction — seznam akcí, které může čtečka obrazovky provést jménem uživatele: kliknutí, dlouhé stisknutí, posouvání, nastavení fokusu, nastavení textu.
Když dojde ke změně v rozhraní (objevil se nový prvek, změnil se text, prvek se stal viditelným nebo neviditelným), operační systém odešle AccessibilityEvent. Čtečka obrazovky je na tyto události přihlášena a reaguje na ně: například při zobrazení dialogového okna čtečka obrazovky automaticky přesune fokus na jeho nadpis a přečte obsah.
// Naslouchání událostem přístupnosti na Androidu
class CustomAccessibilityService : AccessibilityService() {
override fun onAccessibilityEvent(event: AccessibilityEvent?) {
event ?: return
when (event.eventType) {
TYPE_VIEW_CLICKED ->
handleClick(event)
TYPE_WINDOW_STATE_CHANGED ->
handleWindowChange(event)
TYPE_VIEW_TEXT_CHANGED ->
handleTextChange(event)
}
}
}
Na iOS jsou podobné události zpracovávány prostřednictvím UIAccessibility.Notification: layoutChanged (změnilo se rozvržení), screenChanged (zcela nová obrazovka), announcement (libovolné oznámení), pageScrolled (posouvání stránky). Vývojář odesílá tyto události pomocí UIAccessibility.post, aby čtečka obrazovky správně reagovala na změny. Například při otevření modálního okna je třeba odeslat screenChanged s novým nadpisem — jinak VoiceOver zůstane na předchozím prvku pod oknem.
Vytvoření přístupné aplikace není jen o přidávání contentDescription ke každému prvku, ale o promyšlení uživatelského zážitku pro neviditelnou interakci. Základní pravidla jsou společná pro obě platformy, i když implementace se liší.
Všechny interaktivní prvky by měly mít smysluplný popis: tlačítko „Odeslat" by mělo být popsáno jako „Odeslat zprávu", nikoli „Tlačítko". Dekorativní prvky (oddělovače, obrázky na pozadí, ikony bez funkčnosti) by měly být skryté před čtečkou obrazovky. Pořadí navigace by mělo odpovídat logickému toku obrazovky, nikoli vizuálnímu rozvržení. Kontrast textu by měl být alespoň 4.5:1 pro hlavní text a 3:1 pro velký text (WCAG AA).
// iOS: správná konfigurace složitého prvku
let customControl = UIControl()
customControl.isAccessibilityElement = true
customControl.accessibilityLabel = "Hlasitost zvuku"
customControl.accessibilityValue = "75 procent"
customControl.accessibilityTraits = [
.adjustable,
.button
]
customControl.accessibilityHint =
"Zvyšuje nebo snižuje hlasitost"
// Aktualizace při změně hodnoty
func didChangeVolume(newValue: Float) {
customControl.accessibilityValue =
"\(Int(newValue)) procent"
UIAccessibility.post(
notification: .layoutChanged,
argument: customControl
)
}
Na iOS příznak isAccessibilityElement zapíná podporu VoiceOver pro vlastní prvky. Kombinace traits (.adjustable + .button) informuje VoiceOver, že prvek lze nastavit tažením nahoru/dolů a aktivovat dvojitým klepnutím. Po změně hodnoty je povinně odesláno oznámení layoutChanged — jinak bude VoiceOver nadále vyslovovat starou hodnotu.
Pro iOS: používejte accessibilityElements pro přepsání pořadí čtení, accessibilityCustomActions pro další akce v kontextové nabídce a shouldGroupAccessibilityChildren pro seskupování prvků do logických skupin. Pro SwiftUI aplikujte modifikátory .accessibilityLabel(), .accessibilityAddTraits() a .accessibilityRespondsToUserInteraction(). Vyhněte se použití isAccessibilityElement = false na kontejnerech obsahujících interaktivní podřízené prvky — skryje je to před VoiceOver.
Pro Android: používejte accessibilityTraversalBefore a accessibilityTraversalAfter pro pořadí navigace, AccessibilityDelegate pro vlastní prvky a LiveRegion (polite/assertive) pro dynamické aktualizace. V Compose aplikujte modifikátor .semantics {} s contentDescription, stateDescription a customActions. Vyhněte se použití focusable = true na neinteraktivních prvcích — vytvoří to falešné fokusační body pro TalkBack a zmate uživatele.
Testování se čtečkou obrazovky je povinné na fyzickém zařízení. Emulátor/simulátor poskytuje základní představu, ale gesta a rychlost odezvy se liší. Používejte Accessibility Inspector (Xcode) pro iOS a Accessibility Scanner pro Android pro automatické vyhledávání problémů.
Hlavní testovací scénáře: registrace (vyplnění formuláře, validace, odeslání), vyhledávání a navigace v katalogu, objednávka, obnovení hesla. Každý scénář by měl být proveditelný bez vizuální kontroly — pouze prostřednictvím hlasových pokynů čtečky obrazovky. Pokud uživatel čtečky obrazovky nemůže dokončit scénář ve stejném čase jako běžný uživatel (±50%), — aplikace vyžaduje vylepšení přístupnosti.
Často kladené otázky
Je to program, který vyslovuje vše, co se děje na obrazovce smartphonu: text, tlačítka, oznámení. Uživatel ovládá zařízení gesty — dotkne se prvku, aby slyšel jeho název, a dvakrát se dotkne, aby jej aktivoval. Screen Reader nahrazuje zrak hlasem.
Na iOS — VoiceOver (vestavěná systémová čtečka obrazovky od Apple). Na Androidu — TalkBack (součást Android Accessibility Suite od Google). Obě podporují ovládání gesty, hlasovou zpětnou vazbu a Braillovy displeje přes Bluetooth.
Nastavte contentDescription (Android) nebo accessibilityLabel (iOS) pro všechny interaktivní prvky. Skryjte dekorativní prvky před čtečkou obrazovky. Odesílejte oznámení při dynamických změnách. Testujte se zapnutou čtečkou obrazovky na fyzickém zařízení bez vizuální kontroly.
Hlavní rozdíl je v API a gestech. VoiceOver používá UIAccessibility na iOS a rotor pro navigaci (rotace dvěma prsty). TalkBack používá AccessibilityService na Androidu a globální menu pomocí tažení ve tvaru L. Princip fungování — procházení stromu přístupnosti — je stejný.
Screen Reader nemůže obrázek „vidět". Čte textový popis, který vývojář nastaví prostřednictvím contentDescription (Android) nebo accessibilityLabel (iOS). Pokud popis není nastaven, čtečka obrazovky může přečíst název souboru nebo jednoduše říci „obrázek" — což je pro uživatele k ničemu.
Shrnutí
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é