Ich habe einen Entsperrbildschirm, auf dem der Benutzer aufgefordert wird, einen vierstelligen Pin einzugeben. Wenn der Benutzer seinen Pin falsch eingibt, wird eine zuvor unsichtbare TextView
mit einer Fehlermeldung angezeigt. An dieser Stelle wäre es sinnvoll, dass TalkBack den Inhalt der Fehlermeldung laut liest.
Durch einige Experimente wurde mir klar, dass ich android:focusableInTouchMode="true"
auf die Ansicht setzen und programmatisch View#requestFocus()
. Dies funktioniert das erste Mal, scheitert jedoch bei nachfolgenden Fehlern, da die Ansicht bereits fokussiert ist. Außerdem scheint es generell eine schlechte Idee zu sein, den aktuellen Ansichtsfokus zu überschreiben.
Ich habe dann versucht, View#announceForAccessibility(java.lang.CharSequence)
aufzurufen wenn die Fehlermeldung angezeigt wird. Anscheinend wird diese Methode stillschweigend fehlschlagen , wenn die Ansicht momentan nicht sichtbar ist. Kein Problem und ansonsten funktioniert es perfekt. Allerdings ist es nur in API-Level 16+ (Jelly Bean) verfügbar, was seine Nützlichkeit wirklich einschränkt. Es muss eine bessere Lösung geben, da TalkBack API Level 7 + unterstützt.
Ich habe die Google I / O-Sitzungen 2011 und 2012 zur Barrierefreiheit gesehen, aber beide scheinen diesen grundlegenden Anwendungsfall nicht zu erfassen. Was ist der beste Weg, dies zu tun?
Bearbeiten 1: TLDR; Gibt es eine Möglichkeit, erzwingen TalkBack, etwas Text vor der Einführung von View#announceForAccessibility(java.lang.CharSequence)
in Jelly Bean zu lesen?
Sie können View.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
auf Ihrem TextView
verwenden, um TalkBack auf die gleiche Weise wie View.requestFocus()
auszulösen. Da es nur das Ereignis auslöst und die Ansicht nicht wirklich fokussiert, sollte es nicht nach dem ersten Mal abstürzen.
Ich habe die akzeptierte Antwort verwendet, die gut funktioniert. Allerdings mochte ich das irreführende Geräusch nicht, wenn der Fokus der Eingabehilfen auf die Textansicht eingestellt war - der gleiche Klang wie bei der Eingabe von Fokus auf ein EditField durch zweimaliges Antippen (eine Art Schublade-Open-Sound), weil der Eingabefokus war nicht wirklich aus dem EditText mit Eingabefokus (zB mit dem Cursor) verschoben.
Also habe ich es versucht:
%Vor%und interessanterweise funktioniert es - das Etikett wird gelesen, ohne Fokus zu bewegen oder irgendeinen anderen Ton zu geben.
Tags und Links android accessibility talkback