Mam ekran odblokowania, w którym użytkownik jest monitowany o wprowadzenie czterocyfrowej szpilki. Jeśli użytkownik wprowadzi swój kod PIN niepoprawnie, poprzednio niewidoczny kod TextView
zostanie wyświetlony z komunikatem o błędzie. W tym momencie TalkBack powinien przeczytać głośno treść komunikatu o błędzie.Podczas korzystania z TalkBack, jaki jest preferowany sposób powiadomienia użytkownika o zmianie treści TextView?
Przez niektóre eksperymenty zdałem sobie sprawę, że mogę ustawić android:focusableInTouchMode="true"
w widoku i programowo wywołać View#requestFocus()
. Działa to za pierwszym razem, ale kończy się niepowodzeniem w przypadku kolejnych błędów, ponieważ widok jest już skupiony. Poza tym ogólnie rzecz biorąc, ogólnie rzecz biorąc, jest to zły pomysł, aby nadpisać aktualny widok.
Próbowałem następnie wywołać View#announceForAccessibility(java.lang.CharSequence)
po wyświetleniu komunikatu o błędzie. Najwyraźniej ta metoda będzie po cichu zawieść, jeśli widok nie jest obecnie widoczny. Żaden problem, w przeciwnym razie działa idealnie. Jest jednak dostępny tylko na poziomie API 16+ (Jelly Bean), który naprawdę ogranicza jego użyteczność. Musi istnieć lepsze rozwiązanie, ponieważ TalkBack obsługuje API poziomu 7+.
Oglądałem sesje Google I/O z 2011 i 2012 r. Dotyczące dostępności, ale wydaje mi się, że nie obejmują one tego podstawowego przypadku użycia. Jaki jest najlepszy sposób na zrobienie tego?
Edytuj 1: TLDR; Czy istnieje sposób, aby wymusić TalkBack, aby przeczytać jakiś tekst na głos przed wprowadzeniem View#announceForAccessibility(java.lang.CharSequence)
w Jelly Bean?
W jaki sposób wprowadzają kod PIN? Jeśli przez "EditText", czy rozważałeś użycie 'setError()' zamiast osobnego 'TextView'? Domyślam się, że 'setError()' będzie już związany ze strukturą a11y. – CommonsWare
Układ zawiera niestandardową klawiaturę programowalną, która składa się z widoków przycisków "0", które są używane do wprowadzania danych. Cyfry nie są wyświetlane w 'EditText', więc niestety' setError() 'nie jest opcją. Dobry pomysł. Układ jest bardzo podobny do układu ekranu odblokowywania Portfela Google, jeśli jest to pomocne. – twaddington
dla rekordu, setError nie będzie wyświetlał komunikatu o błędzie za pośrednictwem TalkBack, chyba że użytkownik specjalnie naciśnie na niego (Explore by Touch). Funkcja ErrorPopup nie zostanie uwzględniona na liście ekranów widoków, więc nawigacja przez przesuwanie jej nie osiągnie. Oznacza to, że prawdopodobnie niewidomy użytkownik musi wiedzieć, że ErrorPopup istnieje i gdzie jest wyświetlany lub natknąć się na niego - co jest dalekie od rozsądnego UX. – straya