Ich habe einen Entsperrbildschirm, wo der Benutzer aufgefordert wird, einen vierstelligen Pin einzugeben. Wenn der Benutzer seine 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.Was ist bei Verwendung von TalkBack der bevorzugte Weg, um den Benutzer zu warnen, wenn sich der Inhalt einer TextView geändert hat?
Durch einige Experimente erkannte ich, dass ich android:focusableInTouchMode="true"
in der Ansicht festlegen und programmgesteuert View#requestFocus()
aufrufen konnte. Dies funktioniert das erste Mal, scheitert jedoch bei nachfolgenden Fehlern, da die Ansicht bereits fokussiert ist. Außerdem scheint es im Allgemeinen eine schlechte Idee zu sein, den Fokus der aktuellen Ansicht zu überschreiben.
Ich habe dann versucht View#announceForAccessibility(java.lang.CharSequence)
aufrufen, wenn die Fehlermeldung angezeigt wird. Anscheinend wird diese Methode stumm fehlschlagen, wenn die Ansicht derzeit 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 beobachtet, sowohl die 2011 und 2012 Google I/O-Sitzungen auf Zugänglichkeit, aber weder scheint diesen grundlegenden Anwendungsfall abzudecken. Was ist der beste Weg, dies zu tun?
Edit 1: TLDR; Gibt es einen Weg zu force TalkBack, etwas Text vor der Einführung von View#announceForAccessibility(java.lang.CharSequence)
in Jelly Bean zu lesen?
Wie geben sie die PIN ein? Wenn Sie über 'EditText' nachdenken, verwenden Sie' setError() 'statt einer separaten' TextView'? Ich vermute, dass 'setError()' bereits in das a11y-Framework eingebunden ist. – CommonsWare
Das Layout enthält ein benutzerdefiniertes Soft-Tastenfeld, das aus den 'Button'-Ansichten 0-9 besteht, die zur Eingabe verwendet werden. Die Ziffern werden nicht in 'EditText' angezeigt, daher ist 'setError()' leider keine Option. Gute Idee aber. Das Layout ist dem Layout des Google Wallet-Entsperrbildschirms sehr ähnlich, wenn dies hilfreich ist. – twaddington
für den Datensatz, SetError wird keine Ankündigung des Fehlers Text über TalkBack, sofern der Benutzer nicht ausdrücklich darauf drückt (Explore by Touch). Die ErrorPopup-Datei wird nicht in die Bildschirmliste der Ansichten aufgenommen, sodass das Navigieren durch Wischen nicht möglich ist. Dies bedeutet, dass der möglicherweise blinde Benutzer wissen muss, dass das ErrorPopup existiert und wo es angezeigt wird oder darüber stolpert - was weit entfernt von vernünftigem UX ist. – straya