コンテンツ ラベル

ユーザーがスクリーン リーダーなどのユーザー補助機能サービスを利用している場合は、コンテンツ ラベルを通してユーザー インターフェースの各要素について説明できます。

要素内の画像を使って情報を伝える場合なども、コンテンツ ラベルを使えば、その要素に関連付けられている意味や操作についてテキストでユーザーに説明できます。

ユーザー インターフェースの要素にコンテンツ ラベルが設定されていないと、ユーザーが必要な情報を理解したり、インターフェースで操作を実行したりすることが難しくなる場合があります。

実装

View

インターフェースで使用する View のタイプによっては、コンテンツ ラベルを設定し、その View に関連付けられている目的や操作を説明する必要があります。

コンテンツ ラベルを設定する方法

android:contentDescription

ImageViewImageButtonCheckBox など、情報を画像で伝える View を使う場合は、android:contentDescription 属性を使用してその View のコンテンツ ラベルを設定します。

コンテンツ ラベルは、実行時に入手可能な情報のみを利用することがあります。つまり、View の意味は状況に応じて変わる可能性があります。たとえば、音楽の再生中に [再生] ボタンが [一時停止] ボタンに変わる場合は、View#setContentDescription(CharSequence contentDescription) を使用して、コンテンツ ラベルを適宜更新します。

通常、ユーザー補助機能サービスで ViewGroup を記述する場合は、その子 View のコンテンツ ラベルと組み合わせます。この動作をオーバーライドし、そのアイテムとフォーカス不可能な子 View の独自の説明を提供することを指定するには、ViewGroupcontentDescription を設定します。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 ガイドをご覧ください。

Compose

インターフェースで使用されているコンポーズ可能な要素のタイプによっては、コンテンツ ラベルを設定し、その要素に関連付けられている目的や操作を説明する必要があります。

コンテンツ ラベルを設定する方法

コンテンツの説明

ImageIcon など、画像情報を伝える低水準のコンポーズ可能な要素のコンテンツ ラベルを提供するには、コンテンツの説明を設定します。

  • コンテンツ ラベルはランタイム情報を利用する場合があり、コンポーズ可能な要素の意味も変化する可能性があります。たとえば、音楽の再生中に [再生] ボタンが [一時停止] ボタンに変わる場合です。
    • このような場合は、状態を使用して Compose でコンテンツの説明の変化を把握し、新しい値でコンテンツの説明を再コンポーズできるようにします。詳しくは、状態と Jetpack Composeをご確認ください。
  • 場合によっては、要素を結合することで、子孫要素のコンテンツ ラベルを組み合わせた 1 つのフォーカス可能な要素にすることもあります。詳しくは、要素を結合するをご確認ください。

ラベル パラメータ

TextField など一部のコンポーズ可能な要素は、オプションとして label パラメータをサポートしています。ラベルを設定すると、label に渡されたコンポーズ可能な要素が表示されます。このコンポーズ可能な要素は、ユーザー補助サービスを使用して説明できます。

コンテンツ ラベルが必要ないケース

次のような一部のケースでは、コンテンツ ラベルを追加しないでください。

  • Text でレンダリングされるテキストや、Text を含むコンポーズ可能な要素など。こうした要素はユーザー補助サービスに自動的に提供されます。
  • 意味のある情報を持たない装飾的な画像。
    • こういったケースでは、contentDescription パラメータまたは Modifier.semantics#contentDescription プロパティを null に設定するか、Modifier#clearAndSetSemantics を呼び出します。

デザイン

ユーザー インターフェースを設計する場合は、画像で表現するコンテンツのラベルをどのように設定すればユーザー補助機能サービスのユーザーに役立つかをよく検討してください。コンテンツ ラベルの方針は、次のとおりです。

  • 要素に関連付けられた意味や操作を簡潔にわかりやすく説明すること。
  • コンテンツ ラベルに要素のタイプや状態を含めないこと。
  • 要素が操作に関連付けられている場合は、画像ではなく、その操作について説明すること。
  • 要素の具体的な操作方法をユーザーに指示しないこと。

詳しくは、ユーザー補助機能のマテリアル デザインに関する作成ガイドラインをご覧ください。

テスト

アプリのユーザー インターフェースにコンテンツ ラベルが欠落していないことを手動で確認するには:

  1. Talkback を有効にします
  2. アプリを起動します。
  3. 直線的なナビゲーションの操作を使用して、ユーザー補助機能のフォーカスを画面上の各要素に移動します。
  4. TalkBack である要素にフォーカスを移動したときに、その要素の説明が読み上げられない場合や、「ラベルはありません」と読み上げられた場合は、その要素にコンテンツ ラベルが設定されていない可能性があります。

欠落しているコンテンツ ラベルは、Android の自動テストツールで検出できます。デバイス上でのアプリの手動テストには Android 用ユーザー補助検証ツールを使用することをおすすめします。自動テストでは、EspressoRobolectric でユーザー補助機能の確認を有効にします。

検索
検索をクリア
検索を終了
メインメニュー
10755287442452089371
true
ヘルプセンターを検索
true
true
true
true
true
717068
false
false