TalkBack — a Google beépített képernyőolvasója (screen reader) Androidhoz, amely az Android Accessibility Suite csomag része. Hangosítja a felület elemeit és lehetővé teszi a készülék vezérlését gesztusok segítségével, teljes hozzáférést biztosítva a vakok és gyengánlátók számára az okostelefon funkcióihoz. A Google Accessibility Help (2025) szerint a TalkBack a legtöbb Android-eszközön előre telepítve van és több mint 30 nyelvet támogat különböző hangmotorokkal.
Főbb pontok
TalkBack — egy képernyőolvasó (screen reader) Androidhoz, amelyet a Google fejlesztett ki és az Android Accessibility Suite része. Hangvisszajelzést és gesztusvezérlést biztosít a látássérült felhasználók számára. A TalkBack működhet okostelefonokon, tableteken, Smart TV-n és Wear OS-sel ellátott viselhető eszközökön.
A TalkBack először az Android 1.6 (Donut) verzióban jelent meg 2009-ben. Kezdetben különálló projekt volt, de az Android 4.0 (Ice Cream Sandwich) megjelenésével az Android Accessibility Suite részévé vált — ez egy olyan szolgáltatáscsomag, amely a Switch Access-t és a Select to Speak-et is tartalmazza. Az Android 10-től kezdve a TalkBack előre telepítve van minden Google Play-szolgáltatásokkal rendelkező eszközön, beleértve a partnerek — Samsung, Xiaomi, Oppo és mások — eszközeit is.
A TalkBack több mint 30 nyelvet támogat különböző hangmotorokkal: Google Text-to-Speech, Samsung TTS és harmadik fél által fejlesztett motorok. A magyar nyelvhez a Google TTS hangmotort használják, amely természetes kiejtést és helyes intonációt biztosít. A felhasználó beállíthatja a beszéd sebességét, hangmagasságát és kiválaszthatja a hang nemét a TalkBack beállításaiban.
A TalkBack az akadálymentesítési szolgáltatáson (AccessibilityService) alapul — ez egy Android rendszermechanizmus, amely lehetővé teszi az alkalmazások számára, hogy információkat szerezzenek a felület állapotáról és programozottan interakcióba lépjenek vele. Amikor a TalkBack be van kapcsolva, elfogja az összes érintési eseményt és átalakítja azokat a képernyőolvasó speciális gesztusaivá.
A TalkBack működésének kulcseleme az akadálymentesítési fókusz (accessibility focus). Ellentétben a szabványos bemeneti fókusszal, amely a szövegmező kiemelésekként látszik, az akadálymentesítési fókusz sárga keretként jelenik meg az elem körül és láthatatlan a TalkBack nélküli felhasználó számára. Amikor az akadálymentesítési fókusz egy elemre kerül, a TalkBack hangosítja annak tartalmát, típusát és állapotát.
A felhasználó gesztusokkal mozgatja az akadálymentesítési fókuszt: jobbra húzás — következő elem, balra húzás — előző elem. Az elemek bejárási sorrendjét az AccessibilityNodeInfo — az által, hogy Android minden képernyőhöz felépíti az akadálymentesítési fát — határozza meg. A fejlesztő befolyásolhatja a sorrendet a accessibilityTraversalBefore és accessibilityTraversalAfter tulajdonságokon keresztül, ami különösen fontos az egyéni elrendezésű összetett képernyők esetében.
A képernyőn minden View egy csomóponttal van reprezentálva az akadálymentesítési fában — egy AccessibilityNodeInfo objektummal. Ez az objektum tartalmazza: az elem szövegét (contentDescription vagy a View szövege), az elem típusát (gomb, jelölőnégyzet, beviteli mező), állapotát (bekapcsolva/kikapcsolva/kijelölve), pozícióját a képernyőn és az elérhető műveletek listáját. A TalkBack bejárja ezt a fát és hangosítja minden csomópontot a bejárás sorrendjében.
Ha egy View-nak nincs szöveges tartalma (például egy ImageView leírás nélkül), láthatatlan lesz a TalkBack számára — a felhasználó nem fog tudni a létezéséről. A probléma megoldásához a fejlesztő beállítja a contentDescription tulajdonságot — egy szöveges leírást, amelyet a TalkBack a csend helyett kimond. Az Android támogatja továbbá a stateDescription tulajdonságot a változó állapotú elemekhez (kijelölve/nincs kijelölve) és a hintText tulajdonságot a súgóval ellátott beviteli mezőkhöz.
A TalkBack átalakítja a szabványos Android gesztusokat a képernyőolvasó speciális gesztusaivá. A legtöbb művelet egy vagy két ujjal végezhető el, a három ujjal végzett gesztusok a globális műveletek számára vannak fenntartva.
| Művelet | Gesztus | Eredmény |
|---|---|---|
| Elem hangosítása | Érintés 1 ujjal | Kimondja az elem nevét és típusát |
| Aktiválás | Dupla érintés | Gomb megnyomása vagy navigálás |
| Következő | Húzás jobbra | Következő elem |
| Előző | Húzás balra | Előző elem |
| Görgetés | 2 ujj húzása | Lista görgetése |
| TalkBack menü | Húzás fel-balra | Globális beállítási menü |
A „húzás fel-balra“ gesztus (L alakú húzás) megnyitja a TalkBack globális menüjét, ahol a felhasználó megváltoztathatja a beszéd sebességét, bekapcsolhatja a képernyőfüggönyt, elindíthatja az oktatóanyagot vagy megnyithatja a beállításokat. A TalkBack támogatja továbbá a helyi menüt az elemekhez: a fel-jobbra húzás megnyitja az aktuális elem számára elérhető műveletek listáját (például „másolás“, „beillesztés“ egy szövegmező esetén vagy „törlés“ egy chat üzenetnél).
Az Android gazdag API-t biztosít az akadálymentesítés konfigurálásához. Az alapszint a contentDescription, de a TalkBack minőségi támogatásához az AccessibilityNodeInfo, AccessibilityDelegate és LiveRegion használata szükséges.
Az android:contentDescription attribútum beállítja az elem szöveges leírását a TalkBack számára. Kötelező az ImageView, ImageButton, FloatingActionButton és minden olyan egyéni View esetében, amelynek nincs szöveges tartalma. A szabványos elemeknél (TextView, Button) a contentDescription opcionális — a TalkBack automatikusan beolvassa a szöveget.
val avatarView = ImageView(this)
avatarView.contentDescription = "Felhasználói avatar"
avatarView.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_YES
val playButton = ImageButton(this)
playButton.contentDescription = "Videó lejátszása"
val progressBar = ProgressBar(this)
progressBar.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_NO
A importantForAccessibility jelző szabályozza az elem láthatóságát a TalkBack számára. A NO érték elrejti az elemet az akadálymentesítési fából — hasznos dekoratív képek, jelzők és egyéni hátterek esetén. A YES érték kényszeríti az elem beépítését a bejárásba, akkor is, ha nincs szövege. Fontos, hogy ne éljünk vissza a NO használatával: a szemantikailag fontos elemek elrejtése használhatatlanná teszi az alkalmazást a TalkBack felhasználók számára.
Az egyéni View-k esetében, amelyek nem használnak szabványos kattintáskezelőket, felül kell írni az AccessibilityDelegate osztályt — amely az akadálymentesítési eseményeket dolgozza fel. A delegált lehetővé teszi egyéni leírás, elem típus és az elérhető műveletek listájának beállítását, amelyeket a TalkBack a helyi menün keresztül ajánl fel a felhasználónak.
class CustomButtonDelegate : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View, info: AccessibilityNodeInfoCompat
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.text = "Egyéni gomb"
info.className = Button::class.java.name
info.addAction(
AccessibilityNodeInfoCompat.AccessibilityActionCompat(
R.id.custom_action, "Megosztás"
)
)
}
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)
}
}
A példában a delegált tájékoztatja a TalkBacket, hogy az elem egy gomb (className = Button), és biztosítja a „Megosztás“ egyéni műveletet, amely megjelenik a TalkBack helyi menüjében. A performAccessibilityAction metódus dolgozza fel a művelet meghívását. Delegált nélkül a TalkBack egy egyszerű, interaktivitás nélküli területként érzékelné az egyéni View-t, és a felhasználó nem tudna interakcióba lépni vele.
A TalkBack teljes támogatása nemcsak a contentDescription-t foglalja magában, hanem a fókusz kezelését, a LiveRegion-t a dinamikus frissítésekhez, a tesztelést bekapcsolt képernyőolvasóval és az alkalmazkodást a különböző Android verziókhoz.
Amikor a képernyő tartalma a felhasználó explicit művelete nélkül változik (például megjelenik egy új üzenet értesítése vagy frissül a like-ok számlálója), a TalkBacknek értesítést kell kapnia. Ehhez az android:accessibilityLiveRegion attribútumot használják a View számára XML-ben vagy a setAccessibilityLiveRegion() metódust kódban. A polite érték a jelenlegi hangosítás befejezése után adja hozzá a bejelentést, míg az assertive érték azonnal megszakítja azt.
val statusText = TextView(this)
statusText.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_POLITE
// A szöveg frissítésekor a TalkBack automatikusan
// bejelenti a változást
statusText.text = "Új üzenet Annától"
// Kritikus értesítésekhez — assertive
errorBanner.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_ASSERTIVE
A LiveRegion az UIAccessibility.post megfelelője iOS-en. Használja a polite értéket a legtöbb frissítéshez (új üzenetek, állapot frissítése) és az assertive értéket csak kritikus hibákhoz (sikertelen fizetés, kapcsolat megszakadása). Az assertive túlzott használata negatív felhasználói élményt eredményez — a TalkBack folyamatosan megszakítja a jelenlegi hangosítást.
Az összetett képernyőkhöz, ahol több View alkot egy logikai egységet, az AccessibilityNodeProvider vagy a focusSearch használata javasolt a navigáció felülírásához. Például egy 42 cellából álló egyéni naptár (6 hét × 7 nap) nem kényszerítheti a felhasználót arra, hogy mind a 42 elemet végiggörgetve jusson el a következő blokkhoz. A fejlesztő logikai csoportokba rendezheti a cellákat: hónap → hét → nap.
A Jetpack Compose esetében a .semantics {} módosító használható, amely hasonló API-t biztosít: contentDescription, liveRegion, stateDescription, disabled és customActions. A Compose támogatja továbbá a mergeDescendants funkciót a gyermek szemantikák egyetlen egységbe vonásához, ami leegyszerűsíti az elemek csoportosítását anélkül, hogy minden View-hoz kézzel kellene konfigurálni az accessibilityDelegate-t.
Button(
onClick = { sendMessage() },
modifier = Modifier.semantics {
contentDescription("Üzenet küldése")
stateDescription("Küldésre kész")
}
) {
Icon(Icons.Filled.Send, "Küldés")
}
A TalkBack tesztelése fizikai eszközzel vagy emulátorral történik, bekapcsolt szolgáltatás mellett. Javasolt a legfontosabb felhasználói forgatókönyvek átfutása kikapcsolt képernyővel (Screen Curtain) — ez szimulálja a vizuális visszajelzés teljes hiányát. Az Android emellett Accessibility Scannert is biztosít — egy eszközt az akadálymentesítési problémák automatikus észlelésére, amely kiemeli a contentDescription nélküli elemeket, a túl kicsi érintési területeket és az alacsony kontrasztot.
Gyakran ismételt kérdések
Beállítások → Akadálymentesítés → TalkBack → Bekapcsolás. A gyors bekapcsoláshoz mindkét hangerőgomb egyidejű lenyomását kell használni 3 másodpercig. A Google Assistant szintén bekapcsolhatja a TalkBacket a „Kapcsold be a TalkBacket“ hangparanccsal.
A TalkBack képernyőolvasó Androidhoz, a VoiceOver iOS-hez. TalkBack az AccessibilityService-t és a sárga kerettel rendelkező akadálymentesítési fókuszt használja, míg a VoiceOver az UIAccessibility-t és a rotort. A gesztusok és a menük különböznek: a TalkBack L alakú húzásokat használ a globális menü megnyitásához.
Állítson be contentDescription tulajdonságot az összes ImageView és egyéni elem számára. Használja az importantForAccessibility-t a dekoratív elemek elrejtéséhez. Konfigurálja az accessibilityLiveRegion-t a dinamikus frissítésekhez és ellenőrizze az Accessibility Scanner segítségével. A Compose-ban használja a .semantics{} módosítót.
Ez egy objektum, amely egy felületi elemet reprezentál az akadálymentesítési fában. Tartalmazza a szöveget, típust, állapotot, pozíciót és a műveletek listáját. A TalkBack ezt a fát járja be a navigációhoz. A fejlesztő módosíthatja azt az AccessibilityDelegate vagy az XML attribútumain keresztül.
Ellenőrizze az importantForAccessibility tulajdonságot — lehet, hogy NO értékre van állítva. Győződjön meg arról, hogy a contentDescription be van állítva a szöveg nélküli elemekhez. Az egyéni View-khoz implementálja az AccessibilityDelegate-t onInitializeAccessibilityNodeInfo-val. Használja az Accessibility Scannert a diagnosztizáláshoz.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is