Barrierefreiheit: Stolpersteine bei mobilen Anwendungen überwinden, Teil 2

Seite 2: Gerichtete Navigation

Inhaltsverzeichnis

Neben Touch-Steuerung bietet Android weitere Eingabemethoden an. Nutzer können unter anderem Hardware wie eine Tastatur oder ein Steuerkreuz anschließen. Insbesondere erlaubt Android Eingabemethoden, die eine barrierefreie Bedienung ermöglichen. Dazu zählen Sprach- und Schaltersteuerung, die bei motorischen Einschränkungen eingesetzt werden können.

Um eine App für alternative Bedienungsweisen zu rüsten, ist es wie in HTML wichtig, eine gerichtete Navigation sicherzustellen. Standardmäßig verhält sich Android so, dass es fokussierbare Elemente in der Reihenfolge anspringt, in der sie im Layout angeordnet sind. Häufig genügt das für eine angemessene Navigation, aber es gibt Situationen, in denen Entwickler die Navigation explizit durch Festlegen des Fokuswechsels korrigieren müssen.

Bei der Vorwärtsnavigation geht der Fokus beispielsweise durch Drücken der Tab-Taste einer Tastatur an das jeweils nachfolgende Element weiter. Um den Nachfolger festzulegen, lässt sich das Attribut android:nextFocusForward oder die Methode setNextFocusForwardId(int) verwenden:

<RelativeLayout
...>

<Button
android:id="@+id/button1"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:nextFocusForward="@+id/editText"
... />

<Button
android:id="@+id/button2"
android:layout_below="@id/button1"
android:nextFocusForward="@+id/button1"
... />

<EditText
android:id="@id/editText"
android:layout_alignBottom="@+id/button2"
android:layout_toLeftOf="@id/button2"
android:nextFocusForward="@+id/button2"
... />

</RelativeLayout>

Die Fokusreihenfolge geht damit von button1 zu editText, zu button2, was gleichzeitig der visuellen Anordnung entspricht. Ohne das Setzen von android:nextFocusForward würde der Screenreader die Reihenfolge der Elemente im Layout verwenden: button1 zu button2 zu editText.

Bei der unter anderem durch die Pfeiltasten einer Tastatur ausgelösten Richtungsnavigation geht der Fokus an das jeweils in einer bestimmten Richtung liegende Element weiter. Um das Element festzulegen, das den Fokus für die jeweilige Richtung erhalten soll, lassen sich die Attribute android:nextFocusUp, android:nextFocusDown, android:nextFocusLeft und android:nextFocusRight beziehungsweise die Methoden setNextFocusUpId(int), setNextFocusDownId(int), setNextFocusLeftId(int) und setNextFocusRightId(int) verwenden.

<Button
android:id="@+id/button1"
android:nextFocusRight="@+id/button2"
android:nextFocusDown="@+id/editText"
... />

<Button
android:id="@id/button2"
android:nextFocusLeft="@id/button1"
android:nextFocusDown="@id/editText"
... />

<EditText
android:id="@id/editText"
android:nextFocusUp="@id/button1"
... />

Ausgehend von button1 geht eine Rechtsnavigation zu button2, umgekehrt führt eine Linksnavigation von button2 zu button1. Eine Navigation von einem der Buttons nach unten fokussiert editText, und von dort geht es zu button1, sobald der Nutzer hochnavigiert.

Manchmal reichen die gegebenen UI-Komponenten für die Umsetzung der Projektanforderungen nicht aus, sodass eine benutzerdefinierte View-Klasse, eine sogenannte Custom View, erforderlich ist, die Entwickler ebenfalls zugänglich gestalten sollten. Die hauptsächliche Arbeit besteht darin, spezielle API-Methoden im Interesse der Barrierefreiheit zu implementieren – allen voran sendAccessibilityEvent(int) und onPopulateAccessibilityEvent(AccessibilityEvent). Zusätzliche Informationen finden sich in der offiziellen Dokumentation und der Beispielimplementierung.