ユーザーがスクリーン リーダーなどのユーザー補助機能サービスを利用している場合は、コンテンツ ラベルを通してユーザー インターフェースの各要素について説明できます。
要素内の画像を使って情報を伝える場合なども、コンテンツ ラベルを使えば、その要素に関連付けられている意味や操作についてテキストでユーザーに説明できます。
ユーザー インターフェースの要素にコンテンツ ラベルが設定されていないと、ユーザーが必要な情報を理解したり、インターフェースで操作を実行したりすることが難しくなる場合があります。
実装
Viewインターフェースで使用する View
のタイプによっては、コンテンツ ラベルを設定し、その View
に関連付けられている目的や操作を説明する必要があります。
コンテンツ ラベルを設定する方法
android:contentDescription
ImageView
、ImageButton
、CheckBox
など、情報を画像で伝える View
を使う場合は、android:contentDescription
属性を使用してその View
のコンテンツ ラベルを設定します。
コンテンツ ラベルは、実行時に入手可能な情報のみを利用することがあります。つまり、View
の意味は状況に応じて変わる可能性があります。たとえば、音楽の再生中に [再生] ボタンが [一時停止] ボタンに変わる場合は、View#setContentDescription(CharSequence contentDescription)
を使用して、コンテンツ ラベルを適宜更新します。
通常、ユーザー補助機能サービスで ViewGroup
を記述する場合は、その子 View
のコンテンツ ラベルと組み合わせます。この動作をオーバーライドし、そのアイテムとフォーカス不可能な子 View
の独自の説明を提供することを指定するには、ViewGroup
で contentDescription
を設定します。ViewGroup
で設定する場合、contentDescription
内に子 View
のコンテンツ ラベルを含めることが必要になる場合もあります。
android:hint
EditText
または編集可能な TextView
では、android:hint
属性を使用して、テキスト フィールドの目的を指定します。android:contentDescription
を編集可能な View
のコンテンツ ラベルとして使用することはできません。
android:labelFor
View
を別の View
のコンテンツ ラベルとして使用することを指定するには、android:labelFor
属性を使用します。
コンテンツ ラベルが必要ないケース
コンテンツ ラベルが特に必要ないケースもあります。
TextView
(またはそのサブクラス)でレンダリングされるテキストは、ユーザー補助機能サービスに自動的に提供されます。通常、コンテンツ ラベルを追加する必要はありません。- 意味のある情報を持たない装飾的な画像には、コンテンツ ラベルは必要ありません。この場合は、
"@null"
のandroid:contentDescription
属性または"no"
のandroid:importantForAccessibility
属性を設定します。
コンテンツ ラベルの実装について詳しくは、Android デベロッパー トレーニングと API ガイドをご覧ください。
インターフェースで使用されているコンポーズ可能な要素のタイプによっては、コンテンツ ラベルを設定し、その要素に関連付けられている目的や操作を説明する必要があります。
コンテンツ ラベルを設定する方法
コンテンツの説明
Image
や Icon
など、画像情報を伝える低水準のコンポーズ可能な要素のコンテンツ ラベルを提供するには、コンテンツの説明を設定します。
- コンテンツ ラベルはランタイム情報を利用する場合があり、コンポーズ可能な要素の意味も変化する可能性があります。たとえば、音楽の再生中に [再生] ボタンが [一時停止] ボタンに変わる場合です。
- このような場合は、状態を使用して Compose でコンテンツの説明の変化を把握し、新しい値でコンテンツの説明を再コンポーズできるようにします。詳しくは、状態と Jetpack Composeをご確認ください。
- 場合によっては、要素を結合することで、子孫要素のコンテンツ ラベルを組み合わせた 1 つのフォーカス可能な要素にすることもあります。詳しくは、要素を結合するをご確認ください。
ラベル パラメータ
TextField
など一部のコンポーズ可能な要素は、オプションとして label
パラメータをサポートしています。ラベルを設定すると、label
に渡されたコンポーズ可能な要素が表示されます。このコンポーズ可能な要素は、ユーザー補助サービスを使用して説明できます。
コンテンツ ラベルが必要ないケース
次のような一部のケースでは、コンテンツ ラベルを追加しないでください。
Text
でレンダリングされるテキストや、Text
を含むコンポーズ可能な要素など。こうした要素はユーザー補助サービスに自動的に提供されます。- 意味のある情報を持たない装飾的な画像。
- こういったケースでは、
contentDescription
パラメータまたはModifier.semantics#contentDescription
プロパティをnull
に設定するか、Modifier#clearAndSetSemantics
を呼び出します。
- こういったケースでは、
デザイン
ユーザー インターフェースを設計する場合は、画像で表現するコンテンツのラベルをどのように設定すればユーザー補助機能サービスのユーザーに役立つかをよく検討してください。コンテンツ ラベルの方針は、次のとおりです。
- 要素に関連付けられた意味や操作を簡潔にわかりやすく説明すること。
- コンテンツ ラベルに要素のタイプや状態を含めないこと。
- 要素が操作に関連付けられている場合は、画像ではなく、その操作について説明すること。
- 要素の具体的な操作方法をユーザーに指示しないこと。
詳しくは、ユーザー補助機能のマテリアル デザインに関する作成ガイドラインをご覧ください。
テスト
アプリのユーザー インターフェースにコンテンツ ラベルが欠落していないことを手動で確認するには:
- Talkback を有効にします。
- アプリを起動します。
- 直線的なナビゲーションの操作を使用して、ユーザー補助機能のフォーカスを画面上の各要素に移動します。
- TalkBack である要素にフォーカスを移動したときに、その要素の説明が読み上げられない場合や、「ラベルはありません」と読み上げられた場合は、その要素にコンテンツ ラベルが設定されていない可能性があります。
欠落しているコンテンツ ラベルは、Android の自動テストツールで検出できます。デバイス上でのアプリの手動テストには Android 用ユーザー補助検証ツールを使用することをおすすめします。自動テストでは、Espresso と Robolectric でユーザー補助機能の確認を有効にします。