TalkBack è un lettore schermo integrato di Google per Android, che fa parte del pacchetto Android Accessibility Suite. Esso vocalizza gli elementi dell’interfaccia e consente di controllare il dispositivo tramite gesti, offrendo agli utenti non vedenti e ipovedenti pieno accesso alle funzionalità dello smartphone. Secondo Google Accessibility Help (2025), TalkBack è preinstallato sulla maggior parte dei dispositivi Android e supporta oltre 30 lingue con diversi motori vocali.
Punti chiave
TalkBack è un lettore schermo per Android, sviluppato da Google e parte di Android Accessibility Suite. Fornisce feedback vocale e controllo gestuale per utenti con disabilità visive. TalkBack funziona su smartphone, tablet, Smart TV e dispositivi indossabili con Wear OS.
TalkBack è apparso per la prima volta in Android 1.6 (Donut) nel 2009. Inizialmente era un progetto separato, ma con il rilascio di Android 4.0 (Ice Cream Sandwich) è diventato parte di Android Accessibility Suite — un insieme di servizi che include anche Switch Access e Select to Speak. A partire da Android 10, TalkBack è preinstallato su tutti i dispositivi con servizi Google Play, inclusi i dispositivi partner — Samsung, Xiaomi, Oppo e altri.
TalkBack supporta oltre 30 lingue con vari motori vocali: Google Text-to-Speech, Samsung TTS e di terze parti. Per l’italiano, Google TTS fornisce una pronuncia naturale e un’intonazione corretta. L’utente può regolare la velocità della voce, il tono e selezionare il genere della voce nelle impostazioni di TalkBack.
TalkBack funziona basandosi su AccessibilityService — un meccanismo di sistema in Android che consente alle app di ricevere informazioni sullo stato dell’interfaccia e interagire programmaticamente con essa. Quando TalkBack è attivo, intercetta tutti gli eventi tattili e li trasforma in gesti speciali del lettore schermo.
L’elemento chiave del funzionamento di TalkBack è il focus di accessibilità. A differenza del focus di input standard, che appare come un evidenziazione del campo di testo, il focus di accessibilità viene visualizzato come un contorno giallo attorno all’elemento ed è invisibile per gli utenti senza TalkBack. Quando il focus di accessibilità raggiunge un elemento, TalkBack ne vocalizza il contenuto, il tipo e lo stato.
L’utente sposta il focus di accessibilità utilizzando i gesti: scorrere a destra — elemento successivo, scorrere a sinistra — elemento precedente. Gli elementi vengono percorsi nell’ordine definito da AccessibilityNodeInfo — l’albero di accessibilità che Android costruisce per ogni schermata. Lo sviluppatore può influenzare l’ordine tramite le proprietà accessibilityTraversalBefore e accessibilityTraversalAfter, il che è particolarmente importante per schermate complesse con layout personalizzati.
Ogni View sullo schermo è rappresentata da un nodo nell’albero di accessibilità — un oggetto AccessibilityNodeInfo. Questo oggetto contiene: il testo dell’elemento (contentDescription o testo della view), il tipo di elemento (pulsante, casella di controllo, campo di input), lo stato (attivato/disattivato/selezionato), la posizione sullo schermo e un elenco di azioni disponibili. TalkBack percorre questo albero e vocalizza ogni nodo nell’ordine di percorso.
Se una View non ha contenuto testuale (ad esempio, un ImageView senza descrizione), diventa invisibile per TalkBack — l’utente non saprà della sua esistenza. Per risolvere questo problema, lo sviluppatore imposta contentDescription — una descrizione testuale che TalkBack pronuncia invece del silenzio. Android supporta anche stateDescription per elementi con stato modificabile (selezionato/deselezionato) e hintText per campi di input con suggerimenti.
TalkBack trasforma i gesti standard di Android in gesti speciali del lettore schermo. La maggior parte delle operazioni viene eseguita con una o due dita, mentre i gesti a tre dita sono riservati per azioni globali.
| Azione | Gesto | Risultato |
|---|---|---|
| Vocalizza elemento | Tocco singolo | Pronuncia nome e tipo dell’elemento |
| Attiva | Doppio tocco | Pressione pulsante o navigazione |
| Successivo | Scorrere a destra | Elemento successivo |
| Precedente | Scorrere a sinistra | Elemento precedente |
| Scorri | Scorrimento a 2 dita | Scorrimento elenco |
| Menu TalkBack | Scorrere su-sinistra | Menu globale impostazioni |
Il gesto scorrere su-sinistra (scorrimento a forma di L) apre il menu globale di TalkBack, dove l’utente può cambiare la velocità della voce, attivare la tendina schermo, avviare un tutorial o aprire le impostazioni. TalkBack supporta anche un menu contestuale per gli elementi: scorrere su-destra apre un elenco di azioni disponibili per l’elemento corrente (ad esempio, “Copia”, “Incolla” per un campo di testo o “Elimina” per un messaggio chat).
Android fornisce una ricca API per la configurazione dell’accessibilità. Il livello base è contentDescription, ma per un supporto di qualità di TalkBack è necessario lavorare con AccessibilityNodeInfo, AccessibilityDelegate e LiveRegion.
L’attributo android:contentDescription imposta la descrizione testuale dell’elemento per TalkBack. È obbligatorio per ImageView, ImageButton, FloatingActionButton e qualsiasi View personalizzata senza contenuto testuale. Per gli elementi standard (TextView, Button) contentDescription è facoltativo — TalkBack leggerà il testo automaticamente.
val avatarView = ImageView(this)
avatarView.contentDescription = "Avatar utente"
avatarView.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_YES
val playButton = ImageButton(this)
playButton.contentDescription = "Riproduci video"
val progressBar = ProgressBar(this)
progressBar.importantForAccessibility =
IMPORTANT_FOR_ACCESSIBILITY_NO
Il flag importantForAccessibility controlla la visibilità dell’elemento per TalkBack. Il valore NO nasconde l’elemento dall’albero di accessibilità — utile per immagini decorative, indicatori e sfondi personalizzati. Il valore YES include forzatamente l’elemento nel percorso anche se non ha testo. È importante non abusare di NO: nascondere elementi semanticamente importanti rende l’app inaccessibile per gli utenti di TalkBack.
Per Views personalizzate che non utilizzano gestori di clic standard, è necessario sovrascrivere AccessibilityDelegate — una classe che gestisce gli eventi di accessibilità. Il delegato consente di impostare descrizioni personalizzate, tipi di elemento ed elenchi di azioni disponibili che TalkBack offrirà all’utente tramite il menu contestuale.
class CustomButtonDelegate : View.AccessibilityDelegate() {
override fun onInitializeAccessibilityNodeInfo(
host: View, info: AccessibilityNodeInfoCompat
) {
super.onInitializeAccessibilityNodeInfo(host, info)
info.text = "Pulsante personalizzato"
info.className = Button::class.java.name
info.addAction(
AccessibilityNodeInfoCompat.AccessibilityActionCompat(
R.id.custom_action, "Condividi"
)
)
}
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)
}
}
Nell’esempio, il delegato comunica a TalkBack che l’elemento è un pulsante (className = Button) e fornisce un’azione personalizzata “Condividi” che apparirà nel menu contestuale di TalkBack. Il metodo performAccessibilityAction gestisce l’invocazione di questa azione. Senza un delegato, TalkBack tratterebbe la View personalizzata come una semplice area non interattiva e l’utente non potrebbe interagire con essa.
Il supporto completo di TalkBack include non solo contentDescription ma anche gestione del focus, LiveRegion per aggiornamenti dinamici, test con il lettore schermo attivato e adattamento per diverse versioni di Android.
Quando il contenuto dello schermo cambia senza un’azione esplicita dell’utente (ad esempio, appare una notifica di un nuovo messaggio o viene aggiornato un contatore di like), TalkBack deve ricevere una notifica. Per questo, si utilizza l’attributo android:accessibilityLiveRegion per una View in XML o il metodo setAccessibilityLiveRegion() nel codice. Il valore polite aggiunge l’annuncio dopo che la vocalizzazione corrente termina, mentre assertive la interrompe immediatamente.
val statusText = TextView(this)
statusText.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_POLITE
// Quando il testo viene aggiornato, TalkBack annuncerà
// automaticamente la modifica
statusText.text = "Nuovo messaggio da Anna"
// Per le notifiche critiche — assertive
errorBanner.accessibilityLiveRegion =
View.ACCESSIBILITY_LIVE_REGION_ASSERTIVE
LiveRegion è l’equivalente Android di UIAccessibility.post su iOS. Utilizzare polite per la maggior parte degli aggiornamenti (nuovi messaggi, aggiornamenti di stato) e assertive solo per errori critici (pagamento fallito, perdita di connessione). L’uso eccessivo di assertive crea un’esperienza utente negativa — TalkBack interromperà costantemente la vocalizzazione corrente.
Per schermate complesse dove più Views formano un’unica unità logica, si utilizza AccessibilityNodeProvider o focusSearch per sovrascrivere la navigazione. Ad esempio, un calendario personalizzato con 42 celle (6 settimane × 7 giorni) non dovrebbe costringere l’utente a scorrere tutti i 42 elementi per raggiungere il blocco successivo. Lo sviluppatore può raggruppare le celle in unità logiche: mese → settimana → giorno.
Per Jetpack Compose, il modificatore .semantics {} fornisce un’API simile: contentDescription, liveRegion, stateDescription, disabled e customActions. Compose supporta anche mergeDescendants per unire semantiche figlie in una, semplificando il raggruppamento degli elementi senza configurazione manuale di accessibilityDelegate per ogni View.
Button(
onClick = { sendMessage() },
modifier = Modifier.semantics {
contentDescription("Invia messaggio")
stateDescription("Pronto per l’invio")
}
) {
Icon(Icons.Filled.Send, "Invia")
}
Il test di TalkBack viene eseguito utilizzando un dispositivo fisico o un emulatore con il servizio attivato. Si consiglia di percorrere gli scenari utente principali con lo schermo spento (Screen Curtain) — questo simula la completa assenza di feedback visivo. Android fornisce inoltre Accessibility Scanner — uno strumento per il rilevamento automatico dei problemi di accessibilità, che evidenzia elementi senza contentDescription, aree tattili troppo piccole e basso contrasto.
Domande frequenti
Impostazioni → Accessibilità → TalkBack → Attiva. Per un’attivazione rapida, premere entrambi i tasti del volume contemporaneamente per 3 secondi. Google Assistant può anche attivare TalkBack con il comando vocale “Attiva TalkBack”.
TalkBack è un lettore schermo per Android, VoiceOver è per iOS. TalkBack utilizza AccessibilityService e il focus di accessibilità con contorno giallo, mentre VoiceOver utilizza UIAccessibility e il rotore. Gesti e menu differiscono: TalkBack ha scorrimenti a forma di L per il menu globale.
Impostare contentDescription per tutti gli ImageView e gli elementi personalizzati. Utilizzare importantForAccessibility per nascondere elementi decorativi. Configurare accessibilityLiveRegion per aggiornamenti dinamici e verificare con Accessibility Scanner. In Compose, utilizzare il modificatore .semantics{}.
È un oggetto che rappresenta un elemento dell’interfaccia nell’albero di accessibilità. Contiene testo, tipo, stato, posizione e un elenco di azioni. TalkBack percorre questo albero per la navigazione. Lo sviluppatore può modificarlo tramite AccessibilityDelegate o attributi XML.
Controllare importantForAccessibility — potrebbe essere impostato su NO. Assicurarsi che contentDescription sia impostato per elementi senza testo. Per Views personalizzate, implementare AccessibilityDelegate con onInitializeAccessibilityNodeInfo. Utilizzare Accessibility Scanner per la diagnostica.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche