背景情報
TalkBack スクリーン リーダーを使用するユーザーは、次の 2 つの方法でアプリ内を移動できます。
- タッチガイド: 1 本の指で画面上をドラッグすると、要素の物理的な配置を確認できます。
- 直線的なナビゲーション: 左右にスワイプすると、1 アイテムずつ前後に移動します。
Android アプリでは、タッチガイドと直線的なナビゲーションの両方に対応する必要があります。直線的なナビゲーション中の移動順序は、一般に視覚的順序と一致させる必要があります。または、スクリーン リーダーのユーザーのために論理的な順序にするために、移動順序を他の方法で最適化する必要があります。
デフォルトでは、TalkBack はアプリのビュー階層を使用して、直線的なナビゲーション中のアイテムの移動順序を決定します。
実装
アプリのビュー階層がアプリの論理構造を反映していない場合、デベロッパーは android:accessibilityTraversalBefore
または android:accessibilityTraversalAfter
を設定することで、ユーザー補助機能の移動順序を指定できます。これらのプロパティは、スクリーン リーダーがあるビューのコンテンツの前(または後)に、別のビューのコンテンツにアクセスすることを示します。前後関係のないビューは、スクリーン リーダーによって決定された順序で移動します。
ユーザー補助機能の移動順序は、キーボードのナビゲーションに使用される「入力フォーカス」の順序とは異なります。キーボードのナビゲーション順序は、android:nextFocusDown
、android:nextFocusLeft
、android:nextFocusRight
、android:nextFocusUp
によって指定されます。
accessibilityTraversalBefore
と accessibilityTraversalAfter
を使用する場合は、移動順序を過度に制約しないように、次のヒントを考慮してください。
- 論理順序がビュー階層の順序と異なる場所でのみ、これらの属性を使用します。
- ユーザーがタッチガイドによってフォーカスできる各要素は、直線的なナビゲーション中にもフォーカス可能でなければなりません。
- 移動順序は、方向に関係なく、直線的なナビゲーションと一致している必要があります。たとえば、フォーカスを「次の」要素に移動するジェスチャーの直後に、「前の」要素にフォーカスを移動するジェスチャーを行った場合は、常にフォーカスが元の要素に戻るようにする必要があります。
accessibilityTraversalBefore
またはaccessibilityTraversalAfter
を定義する場合や、ユーザーが直線的なナビゲーションの使用時に特定の要素に到達できない状況に遭遇する可能性がある場合は、サイクルを導入すべきではありません。
デザイン
アプリを設計するときは、スクリーン リーダーを使用するユーザーに、どのように直線的なナビゲーションを使用してインターフェース内の情報を確認してもらうかを考慮します。移動順序は情報の視覚的な表示と一致させることが理想的ですが、一致させるのが不可能な場合は、インターフェースの論理構造や意図を伝える移動順序を指定することもできます。
詳しくは、使いやすいナビゲーションの作成をご覧ください。
テスト
アプリのユーザー補助機能の移動順序を手動で評価するには:
- Talkback を有効にします。
- アプリを起動します。
- 直線的なナビゲーションの操作を使用して、ユーザー補助機能のフォーカスを画面上の各要素に移動します。
- TalkBack によってフォーカスが画面上の要素を論理的な順序で移動し、移動先の各要素についてわかりやすい説明が読み上げられることを確認します。
- TalkBack が移動方向に関係なく、一貫した方法で画面上の要素のフォーカスを前後に移動させることを確認します。
Android の自動テストツールを使うと、移動順序の問題の一部を検出できます。端末上でのアプリの手動テストには Android 用ユーザー補助検証ツールを使用することをおすすめします。自動テストでは、Espresso と Robolectric でユーザー補助機能の確認を有効にします。