アクセシビリティフォーカスの順序を変更することは可能ですか?たとえば、IDがview1、view2、view3の3つのビューが並んでいる場合、ユーザーがview1から右にスワイプしたときにアクセシビリティフォーカスをview3に移動させる簡単な方法はありますか?
これが私が試したことです:
線形レイアウトで次のものがあります。
<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"/>
次に、これを起動して、アクセシビリティフォーカスを最初のimageViewに配置します。右にスワイプして次のアイテムに移動すると、アクセシビリティフォーカスがimageView3に移動することを期待していますが、代わりにimageView2に移動します。
MinSdkVersion> = 22のアプリケーションの場合、Android:accessibilityTraversalAfterを使用してXMLで直接スクリーンリーダーのトラバーサル順序を設定できます。
<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" />
より低いAPIレベルをサポートするアプリケーションの場合、トラバーサル順序はViewCompatを使用してプログラムで設定できます。
ViewCompat.setAccessibilityDelegate(imageView2, object : AccessibilityDelegateCompat() {
override fun onInitializeAccessibilityNodeInfo(Host: View?, info: AccessibilityNodeInfoCompat?) {
info?.setTraversalAfter(imageView3)
super.onInitializeAccessibilityNodeInfo(Host, info)
}
})
スクリーンリーダーのユーザーはナビゲーションの一貫性に依存しているため、フォーカスの順序を変更することはアンチパターンであり、避ける必要があることに注意してください。