Ho una schermata di sblocco in cui all'utente viene richiesto di inserire un pin di quattro cifre. Se l'utente immette il proprio pin in modo errato, viene visualizzato un messaggio TextView
precedentemente invisibile con un messaggio di errore. A questo punto sarebbe utile che TalkBack leggesse ad alta voce il contenuto del messaggio di errore.Quando si utilizza TalkBack, qual è il modo preferito per avvisare l'utente quando il contenuto di un TextView è cambiato?
Attraverso alcuni esperimenti, mi sono reso conto che potevo impostare android:focusableInTouchMode="true"
sulla vista e chiamare programmaticamente View#requestFocus()
. Funziona per la prima volta, ma non riesce a errori successivi poiché la vista ha già lo stato attivo. Inoltre, in generale, sembra una cattiva idea ignorare l'attuale focus della vista.
Ho quindi provato a richiamare View#announceForAccessibility(java.lang.CharSequence)
quando viene visualizzato il messaggio di errore. Apparentemente questo metodo sarà fallire automaticamente se la vista non è attualmente visibile. Nessun problema e altrimenti funziona perfettamente. Tuttavia, è disponibile solo nel livello API 16+ (Jelly Bean), il che limita davvero la sua utilità. Deve esserci una soluzione migliore dal momento che TalkBack supporta l'API 7+.
Ho visto le sessioni di I/O di Google 2011 e 2012 sull'accessibilità, ma nessuna delle due sembra coprire questo caso di utilizzo di base. Qual'è il miglior modo per farlo?
Modifica 1: TLDR; C'è un modo per forza TalkBack per leggere del testo ad alta voce prima dell'introduzione di View#announceForAccessibility(java.lang.CharSequence)
in Jelly Bean?
Come stanno inserendo il PIN? Se tramite un 'EditText', hai considerato l'utilizzo di' setError() 'invece di un separato' TextView'? La mia ipotesi è che 'setError()' sarà già legato al framework di a11y. – CommonsWare
Il layout contiene una tastiera virtuale personalizzata costituita dalle viste di 'Button' 0-9 utilizzate per fornire input. Le cifre non sono visualizzate in un 'EditText', quindi sfortunatamente' setError() 'non è un'opzione. Buona idea però. Il layout è molto simile al layout della schermata di sblocco di Google Wallet, se è utile. – twaddington
per il record, setError non produrrà un annuncio del testo dell'errore tramite TalkBack a meno che l'utente non prema specificatamente su di esso (Esplora al tocco). L'ErrorPopup non sarà incluso nell'elenco delle schermate delle schermate, quindi la navigazione scorrendo non lo raggiungerà. Ciò significa che l'utente forse cieco deve sapere che il ErrorPopup esiste e dove è visualizzato o inciampare su di esso - che è lontano dal ragionevole UX. – straya