Viele Android TV-Apps enthalten native Android-Komponenten, müssen Sie auch die Zugänglichkeit von Drittanbieter-Apps Frameworks oder Komponenten zu erstellen, insbesondere wenn Sie benutzerdefinierte Ansichten verwenden.
Komponenten der benutzerdefinierten Ansicht, die direkt mit OpenGL oder Canvas verbinden, funktionieren möglicherweise nicht gut mit Bedienungshilfen wie TalkBack und Schalterzugriff.
Berücksichtigen Sie einige der folgenden Probleme, die bei der Umstellung von TalkBack auftreten können am:
- Möglicherweise verschwindet der Fokus der Bedienungshilfen (ein grünes Rechteck) in Ihrer App.
- Der Bedienungshilfenfokus könnte die Begrenzung des gesamten Bildschirms auswählen.
- Der Bedienungshilfenfokus ist möglicherweise nicht beweglich.
- Die vier Richtungstasten auf dem Steuerkreuz haben möglicherweise keine Wirkung, selbst wenn sie von deinem Code verarbeitet werden.
Wenn Sie eines dieser Probleme in Ihrer App feststellen, prüfen Sie,
App veröffentlicht ihre AccessibilityNodeInfo
zu den Bedienungshilfen hinzu.
Im weiteren Verlauf dieses Leitfadens finden Sie einige Lösungen und Best Practices, um diese Probleme zu beheben.
Ereignisse mit dem Steuerkreuz werden von Bedienungshilfen gesteuert
Die Ursache dieses Problems ist, dass Schlüsselereignisse von Bedienungshilfen verarbeitet werden. Dienstleistungen.
Wenn TalkBack eingeschaltet ist, werden über das Steuerkreuz Ereignisse nicht an den vom Entwickler definierten Steuerkreuz-Handler übergeben. Stattdessen empfangen die Schlüsselereignisse, damit sie Fokus auf Barrierefreiheit. Da benutzerdefinierte Android-Komponenten nicht standardmäßig Bedienungshilfen über ihre Position auf dem Bildschirm, Bedienungshilfen können den Bedienungshilfenfokus nicht verschieben, um sie hervorzuheben.
Andere Bedienungshilfen sind ähnlich betroffen: Auch Steuerkreuz-Ereignisse können von beim Verwenden des Schalterzugriffs.
Weil Ereignisse über das Steuerkreuz an die Bedienungshilfen gesendet werden
wo sich UI-Komponenten in einer benutzerdefinierten Ansicht befinden.
Sie müssen AccessibilityNodeInfo
implementieren, damit Ihre App den
Schlüsselereignisse korrekt erfassen.
Informationen für Bedienungshilfen zugänglich machen
Um die Bedienungshilfen mit ausreichenden Informationen zu den
Position und Beschreibung der benutzerdefinierten Ansichten, implementieren Sie AccessibilityNodeInfo
um Details zu jeder Komponente anzuzeigen.
Die logische Beziehung von Ansichten zu definieren, damit Bedienungshilfen
Fokus verwalten, ExploreByTouchHelper
implementieren
und lege ihn mit
ViewCompat.setAccessibilityDelegate(View, AccessibilityDelegateCompat)
für benutzerdefinierte Ansichten.
Überschreibe bei der Implementierung von ExploreByTouchHelper
die vier abstrakten Methoden:
Kotlin
// Return the virtual view ID whose view is covered by the input point (x, y). protected fun getVirtualViewAt(x: Float, y: Float): Int // Fill the virtual view ID list into the input parameter virtualViewIds. protected fun getVisibleVirtualViews(virtualViewIds: List<Int>) // For the view whose virtualViewId is the input virtualViewId, populate the // accessibility node information into the AccessibilityNodeInfoCompat parameter. protected fun onPopulateNodeForVirtualView(virtualViewId: Int, @NonNull node: AccessibilityNodeInfoCompat) // Set the accessibility handling when perform action. protected fun onPerformActionForVirtualView(virtualViewId: Int, action: Int, @Nullable arguments: Bundle): Boolean
Java
// Return the virtual view ID whose view is covered by the input point (x, y). protected int getVirtualViewAt(float x, float y) // Fill the virtual view ID list into the input parameter virtualViewIds. protected void getVisibleVirtualViews(List<Integer> virtualViewIds) // For the view whose virtualViewId is the input virtualViewId, populate the // accessibility node information into the AccessibilityNodeInfoCompat parameter. protected void onPopulateNodeForVirtualView(int virtualViewId, @NonNull AccessibilityNodeInfoCompat node) // Set the accessibility handling when perform action. protected boolean onPerformActionForVirtualView(int virtualViewId, int action, @Nullable Bundle arguments)
Weitere Informationen erhalten Sie im Video Google I/O 2013 - Enableing, blind and scharfe Bedienungshilfen unter Android oder weitere Informationen zum Ausfüllen von Bedienungshilfen-Ereignissen.
Best Practices
Erforderlich:
AccessibilityNodeInfo.getBoundsInScreen()
die Position der Komponente definieren.Erforderlich:
AccessibilityNodeInfo.setVisibleToUser()
die Sichtbarkeit der Komponente widerspiegeln.Erforderlich:
AccessibilityNodeInfo.getContentDescription()
muss die Inhaltsbeschreibung für die Ankündigung durch TalkBack enthalten.AccessibilityNodeInfo.setClassName()
angeben damit Dienste den Komponententyp unterscheiden können.Bei der Implementierung von
performAction()
: die Aktion mithilfe eines entsprechendenAccessibilityEvent
widerspiegeln.Um weitere Aktionstypen wie
ACTION_CLICK
zu implementieren, rufen SieAccessibilityNodeInfo.addAction(ACTION_CLICK)
unter Verwendung der entsprechenden Logik inperformAction()
.Geben Sie gegebenenfalls den Komponentenstatus für
setFocusable()
an.setClickable()
setScrollable()
und ähnliche Methoden.Lesen Sie die Dokumentation zu
AccessibilityNodeInfo
andere Möglichkeiten zu identifizieren, wie Bedienungshilfen besser mit Komponenten.
Beispiel
Das Beispiel zur Barrierefreiheit im Internet bei der benutzerdefinierten Ansicht für Android TV enthält Best Practices für Mit benutzerdefinierten Ansichten können Apps nun mit Bedienungshilfen ausgestattet werden.