Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Modify accessibility focus order

Tags:

Is it possible to change the accessibility focus order? For example, if I have 3 views side by side, with ids view1, view2, and view3, is there a simple way to make the accessibility focus go to view3 when the user swipes right from view1?

Here is what I've tried:

I have the following in a linear layout.

<ImageView     android:layout_width="30dp"     android:layout_height="30dp"     android:id="@+id/imageView"     android:focusable="true"     android:nextFocusUp="@+id/imageView3"     android:nextFocusDown="@+id/imageView3"     android:nextFocusRight="@+id/imageView3"     android:nextFocusLeft="@+id/imageView3"     android:nextFocusForward="@+id/imageView3"     android:src="@drawable/ic_launcher"/>  <ImageView     android:layout_width="30dp"     android:layout_height="30dp"     android:id="@+id/imageView2"     android:focusable="true"     android:src="@drawable/ic_launcher"/>  <ImageView     android:layout_width="30dp"     android:layout_height="30dp"     android:id="@+id/imageView3"     android:focusable="true"     android:nextFocusUp="@+id/imageView2"     android:nextFocusDown="@+id/imageView2"     android:nextFocusRight="@+id/imageView2"     android:nextFocusLeft="@+id/imageView2"     android:nextFocusForward="@+id/imageView2"     android:src="@drawable/ic_launcher"/> 

Then, I launch this and place accessibility focus on the first imageView. Upon swiping right to move to the next item, I expect it to move accessibility focus to imageView3, but instead it goes to imageView2.

like image 825
Allen Z. Avatar asked Nov 04 '14 07:11

Allen Z.


People also ask

How do you change the focus on accessibility?

In most browsers, users can move focus by pressing the Tab key and the Shift + Tab keys.

What is focus order accessibility?

✎ Technique: Focus order and tabindex This helps people who are using the keyboard or alternative input devices to follow focus in a logical order. The order that elements appear in the document source should reflect the order they appear visually.

How do I check my focus order?

Focus Order: The navigation order of focusable elements MUST be logical and intuitive. Note 1: Focusable elements include links, form inputs and controls, buttons, and any element with a tabindex value of 0 or greater. Note 2: The default reading order is determined by the order of the focusable elements in the DOM.


1 Answers

For applications with minSdkVersion >= 22, you may set the traversal order for screen readers direct in the XML with android:accessibilityTraversalAfter:

<ImageView     android:id="@+id/imageView"     android:layout_width="30dp"     android:layout_height="30dp"     android:src="@drawable/ic_launcher" />  <ImageView     android:id="@+id/imageView2"     android:layout_width="30dp"     android:accessibilityTraversalAfter="@id/imageView3"     android:layout_height="30dp"     android:src="@drawable/ic_launcher" />  <ImageView     android:id="@+id/imageView3"     android:layout_width="30dp"     android:layout_height="30dp"     android:src="@drawable/ic_launcher" /> 

For applications supporting lower API levels, the traversal order may be set programmatically with ViewCompat:

ViewCompat.setAccessibilityDelegate(imageView2, object : AccessibilityDelegateCompat() {     override fun onInitializeAccessibilityNodeInfo(host: View?, info: AccessibilityNodeInfoCompat?) {         info?.setTraversalAfter(imageView3)         super.onInitializeAccessibilityNodeInfo(host, info)     } }) 

Please keep in mind that screen reader users rely on the consistency of the navigation, therefore, changing the focus order is an anti-pattern and should be avoided.

like image 70
Kio Krofovitch Avatar answered Oct 21 '22 17:10

Kio Krofovitch