TalkBack — cititorul de ecran încorporat (screen reader) de la Google pentru Android, care face parte din pachetul Android Accessibility Suite. Acesta vocalizează elementele interfeței și permite controlarea dispozitivului cu ajutorul gesturilor, oferind utilizatorilor nevăzători și cu deficiențe de vedere acces deplin la funcțiile smartphone-ului. Conform Google Accessibility Help (2025), TalkBack este preinstalat pe majoritatea dispozitivelor Android și suportă peste 30 de limbi cu diferite motoare vocale.
Principalele puncte
TalkBack — este un cititor de ecran (screen reader) pentru Android, dezvoltat de Google și care face parte din Android Accessibility Suite. Acesta oferă feedback vocal și control prin gesturi pentru utilizatorii cu deficiențe de vedere. TalkBack poate funcționa atât pe smartphone-uri, cât și pe tablete, Smart TV și dispozitive purtabile cu Wear OS.
TalkBack a apărut pentru prima dată în Android 1.6 (Donut) în 2009. Inițial era un proiect separat, dar odată cu lansarea Android 4.0 (Ice Cream Sandwich) a devenit parte a Android Accessibility Suite — un set de servicii care include, de asemenea, Switch Access și Select to Speak. Începând cu Android 10, TalkBack este preinstalat pe toate dispozitivele cu servicii Google Play, inclusiv dispozitivele partenerilor — Samsung, Xiaomi, Oppo și altele.
TalkBack suportă peste 30 de limbi cu diferite motoare vocale: Google Text-to-Speech, Samsung TTS și motoare terțe. Pentru limba română se folosește motorul vocal Google TTS, care asigură o pronunție naturală și intonație corectă. Utilizatorul poate ajusta viteza vorbirii, înălțimea tonului și poate selecta genul vocii în setările TalkBack.
TalkBack funcționează pe baza serviciului de accesibilitate (AccessibilityService) — un mecanism de sistem Android care permite aplicațiilor să obțină informații despre starea interfeței și să interacționeze programatic cu aceasta. Când TalkBack este activat, acesta interceptează toate evenimentele tactile și le transformă în gesturi speciale ale cititorului de ecran.
Elementul cheie al funcționării TalkBack — focusul de accesibilitate (accessibility focus). Spre deosebire de focusul standard de intrare, care este vizibil ca o evidențiere a câmpului text, focusul de accesibilitate se afișează ca un cadru galben în jurul elementului și este invizibil pentru utilizatorul fără TalkBack. Când focusul de accesibilitate ajunge pe un element, TalkBack vocalizează conținutul, tipul și starea acestuia.
Utilizatorul mută focusul de accesibilitate prin gesturi: glisare la dreapta — elementul următor, glisare la stânga — elementul anterior. Elementele sunt parcurse în ordinea determinată de AccessibilityNodeInfo — arborele de accesibilitate pe care Android îl construiește pentru fiecare ecran. Dezvoltatorul poate influența ordinea prin proprietățile accessibilityTraversalBefore și accessibilityTraversalAfter, ceea ce este deosebit de important pentru ecranele complexe cu layout personalizat.
Fiecare View de pe ecran este reprezentat de un nod în arborele de accesibilitate — un obiect AccessibilityNodeInfo. Acest obiect conține: textul elementului (contentDescription sau textul view-ului), tipul elementului (buton, casetă de bifat, câmp de introducere), starea (activat/dezactivat/selectat), poziția pe ecran și lista acțiunilor disponibile. TalkBack parcurge acest arbore și vocalizează fiecare nod în ordinea parcurgerii.
Dacă un View nu are conținut text (de exemplu, un ImageView fără descriere), devine invizibil pentru TalkBack — utilizatorul nu va afla despre existența sa. Pentru a rezolva această problemă, dezvoltatorul setează contentDescription — o descriere text pe care TalkBack o pronunță în loc de tăcere. Android suportă, de asemenea, stateDescription pentru elementele cu stare modificabilă (selectat/neselectat) și hintText pentru câmpurile de introducere cu sugestie.
TalkBack transformă gesturile standard Android în gesturi speciale ale cititorului de ecran. Majoritatea operațiilor se execută cu unul sau două degete, gesturile cu trei degete fiind rezervate pentru acțiuni globale.
| Acțiune | Gest | Rezultat |
|---|---|---|
| Vocalizează elementul | Atingere cu 1 deget | Pronunță numele și tipul elementului |
| Activează | Atingere dublă | Apăsare buton sau navigare |
| Următorul | Glisare la dreapta | Elementul următor |
| Anteriorul | Glisare la stânga | Elementul anterior |
| Derulare | 2 degete glisare | Derularea listei |
| Meniu TalkBack | Glisare sus-stânga | Meniu global de setări |
Gestul „glisare sus-stânga“ (glisare în formă de L) deschide meniul global TalkBack, unde utilizatorul poate modifica viteza vorbirii, poate activa perdeaua ecranului, poate lansa tutorialul sau poate deschide setările. TalkBack suportă, de asemenea, meniul contextual pentru elemente: glisarea sus-dreapta deschide lista acțiunilor disponibile pentru elementul curent (de exemplu, „copiază“, „inserează“ pentru un câmp text sau „șterge“ pentru un mesaj în chat).
Android oferă un API bogat pentru configurarea accesibilității. Nivelul de bază este contentDescription, dar pentru suport de calitate TalkBack este necesară lucrul cu AccessibilityNodeInfo, AccessibilityDelegate și LiveRegion.
Atributul android:contentDescription setează descrierea text a elementului pentru TalkBack. Este obligatoriu pentru ImageView, ImageButton, FloatingActionButton și orice View personalizat fără conținut text. Pentru elementele standard (TextView, Button) contentDescription este opțional — TalkBack va citi textul automat.
val avatarView = ImageView(this)
avatarView.contentDescription = "Avatarul utilizatorului"
avatarView.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_YES
val playButton = ImageButton(this)
playButton.contentDescription = "Redă videoclipul"
val progressBar = ProgressBar(this)
progressBar.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_NO
Indicatorul importantForAccessibility controlează vizibilitatea elementului pentru TalkBack. Valoarea NO ascunde elementul din arborele de accesibilitate — util pentru imagini decorative, indicatoare și fundaluri personalizate. Valoarea YES include forțat elementul în parcurgere, chiar dacă nu are text. Este important să nu se abuzeze de NO: ascunderea elementelor semantic importante face aplicația inaccesibilă pentru utilizatorii TalkBack.
Pentru View-urile personalizate care nu utilizează gestionarii standard de clic, este necesară suprascrierea AccessibilityDelegate — clasa care procesează evenimentele de accesibilitate. Delegatul permite setarea unei descrieri personalizate, a tipului elementului și a listei acțiunilor disponibile pe care TalkBack le va oferi utilizatorului prin meniul contextual.
class CustomButtonDelegate : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View, info: AccessibilityNodeInfoCompat
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.text = "Buton personalizat"
info.className = Button::class.java.name
info.addAction(
AccessibilityNodeInfoCompat.AccessibilityActionCompat(
R.id.custom_action, "Partajează"
)
)
}
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)
}
}
În exemplu, delegatul informează TalkBack că elementul este un buton (className = Button) și oferă acțiunea personalizată „Partajează“, care va apărea în meniul contextual TalkBack. Metoda performAccessibilityAction procesează apelarea acestei acțiuni. Fără delegat, TalkBack ar percepe View-ul personalizat ca pe o simplă zonă fără interactivitate, iar utilizatorul nu ar putea interacționa cu el.
Suportul complet TalkBack include nu doar contentDescription, ci și gestionarea focusului, LiveRegion pentru actualizări dinamice, testarea cu cititorul de ecran activ și adaptarea la diferite versiuni Android.
Când conținutul ecranului se modifică fără o acțiune explicită a utilizatorului (de exemplu, apare o notificare de mesaj nou sau se actualizează contorul de aprecieri), TalkBack trebuie să primească o notificare. Pentru aceasta se utilizează atributul android:accessibilityLiveRegion pentru View în XML sau metoda setAccessibilityLiveRegion() în cod. Valoarea polite adaugă anunțul după terminarea vocalizării curente, iar valoarea assertive îl întrerupe imediat.
val statusText = TextView(this)
statusText.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_POLITE
// La actualizarea textului, TalkBack va anunța automat
// modificarea
statusText.text = "Mesaj nou de la Ana"
// Pentru notificări critice — assertive
errorBanner.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_ASSERTIVE
LiveRegion — este analogul UIAccessibility.post pe iOS. Folosește polite pentru majoritatea actualizărilor (mesaje noi, actualizare status) și assertive doar pentru erori critice (plată eșuată, pierderea conexiunii). Utilizarea excesivă a assertive creează o experiență negativă pentru utilizator — TalkBack va întrerupe constant vocalizarea curentă.
Pentru ecranele complexe unde mai multe View-uri formează o unitate logică, se utilizează AccessibilityNodeProvider sau focusSearch pentru suprascrierea navigării. De exemplu, un calendar personalizat cu 42 de celule (6 săptămâni × 7 zile) nu ar trebui să forțeze utilizatorul să parcurgă toate cele 42 de elemente pentru a trece la următorul bloc. Dezvoltatorul poate combina celulele în grupuri logice: lună → săptămână → zi.
Pentru Jetpack Compose se folosește modificatorul .semantics {}, care oferă un API similar: contentDescription, liveRegion, stateDescription, disabled și customActions. Compose suportă, de asemenea, mergeDescendants pentru combinarea semanticilor copil într-una singură, ceea ce simplifică gruparea elementelor fără configurarea manuală a accessibilityDelegate pentru fiecare View.
Button(
onClick = { sendMessage() },
modifier = Modifier.semantics {
contentDescription("Trimite mesaj")
stateDescription("Gata de trimitere")
}
) {
Icon(Icons.Filled.Send, "Trimite")
}
Testarea TalkBack se realizează printr-un dispozitiv fizic sau emulator cu serviciul activat. Se recomandă parcurgerea scenariilor cheie de utilizator cu ecranul oprit (Screen Curtain) — aceasta simulează absența completă a feedback-ului vizual. Android oferă, de asemenea, Accessibility Scanner — un instrument pentru detectarea automată a problemelor de accesibilitate, care evidențiază elementele fără contentDescription, zonele tactile prea mici și contrastul scăzut.
Întrebări frecvente
Setări → Accesibilitate → TalkBack → Activează. Pentru activarea rapidă se folosește apăsarea simultană a ambelor taste de volum timp de 3 secunde. Google Assistant poate, de asemenea, să activeze TalkBack prin comanda vocală „Activează TalkBack“.
TalkBack — cititor de ecran pentru Android, VoiceOver — pentru iOS. TalkBack utilizează AccessibilityService și focusul de accesibilitate cu cadru galben, iar VoiceOver — UIAccessibility și rotorul. Gesturile și meniurile diferă: TalkBack are glisări în formă de L pentru meniul global.
Setează contentDescription pentru toate ImageView-urile și elementele personalizate. Folosește importantForAccessibility pentru ascunderea elementelor decorative. Configurează accessibilityLiveRegion pentru actualizări dinamice și verifică prin Accessibility Scanner. În Compose, aplică modificatorul .semantics{}.
Este un obiect care reprezintă un element de interfață în arborele de accesibilitate. Conține text, tip, stare, poziție și lista acțiunilor. TalkBack parcurge acest arbore pentru navigare. Dezvoltatorul îl poate modifica prin AccessibilityDelegate sau atribute în XML.
Verifică importantForAccessibility — posibil să fie setat pe NO. Asigură-te că contentDescription este setat pentru elementele fără text. Pentru View-urile personalizate, implementează AccessibilityDelegate cu onInitializeAccessibilityNodeInfo. Folosește Accessibility Scanner pentru diagnosticare.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și