Unterstützung von Bedienungshilfen für die benutzerdefinierte Ansicht auf Android TV

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.

Verbrauch von Steuerkreuz-Ereignissen Abbildung 1: Diagramme zur Funktionsweise des Systems bei aktiviertem und deaktiviertem TalkBack.

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

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.