アクティブビュー名

This page is not available in the language you requested. You have been redirected to the English version of the page.
Link to this page copied to clipboard
Not for use with personal data

WCAG 2.0 - 4.1.2 A Impact - Critical

チェック内容

インタラクティブな要素には、TalkBackやVoice Accessなどの支援技術に利用可能なアクセシブルな名前が必要です。

失敗例 ❌

Android phone screen showing a toolbar with three icon-only buttons (search, filter, sort). A TalkBack focus ring is around the search button. A speech bubble below reads ‘Button.’

インタラクティブな要素に名前が設定されていない

TalkBack の読み上げ "Button"

Voice Access — ユーザーが「検索」と発話
要素は名前がないため応答しない

成功例 ✅

Android phone screen showing a toolbar with three icon-only buttons (search, filter, sort). A TalkBack focus ring is around the search button. A speech bubble below reads ‘Search, button.’

`contentDescription="Search"`

TalkBack の読み上げ "Search, button"

Voice Access — ユーザーが「検索」と発話
名前が一致したため要素がアクティブになる

概要

  • このルールはユーザーにとって非常に重要です
  • すべてのインタラクティブ要素には名前が必要です。ボタン、リンク、カスタムコントロールなどは、TalkBackがアナウンスできるアクセシブルな名前を持つ必要があります
  • インタラクティブ要素に可視テキストがない場合は、contentDescriptionまたはaccessibilityLabelプロパティを使用して明示的に設定します
  • TalkBackが何もアナウンスするものがない状態にしないこと:名前がないと、要素はその役割や値だけをアナウンスし、ユーザーにその機能のコンテキストを提供しません

ユーザーへの影響

TalkBackを使用している人々が最も影響を受けます。名前のないインタラクティブ要素では、使用者にその要素の完全なコンテキストや目的を伝えることができません。

ボタンや画像ボタン、カスタムコントロールなどのインタラクティブ要素にアクセシブルな名前がない場合、TalkBackはその要素がフォーカスされたときに何もアナウンスしません。 たとえば、ユーザーがダウンロードできることを示す下線付き矢印の画像を持つボタンがあるとします。アクセシブルな名前がない場合、TalkBackは「ボタン、ダブルタップでアクティブ化」としかアナウンスしません。

このルールは、Voice Accessを使用している人々にも影響を及ぼします。Voice Accessユーザーが表示されているラベルを発話して要素をアクティブにしようとすると、要素が応答しないことがあります。

アクティブ ビュー名の問題を確認

  1. TalkBackをオンにする
  2. インタラクティブな要素にフォーカスする
  3. 次のいずれかが発生します:
    • 非アクセシブル:名前ではなく役割や値のみがアナウンスされる
    • アクセシブル:その名前がTalkBackでアナウンスされる
tip

想定外の失敗が発生していますか? 要素にフォーカスしたときにTalkBackがコンテンツをアナウンスするけれども、このルールが失敗している場合、要素に名前を付けていることを確認してください。要素に定義された名前がないと、スクリーンリーダーはしばしばそのをアナウンスします。しかし、値は欠けているアクセシブルな名前の代わりにはなりません。

問題の修正

アクティブ ビュー名の問題を解決するには、各インタラクティブ要素にテキストラベルまたはコンテンツの説明を追加して、TalkBackがアナウンスする意味のある名前を提供します。

選択する名前には以下が含まれていることを確認してください:

  • 要素の可視ラベルを含んでいること。
  • 外見ではなくアクションを説明すること。たとえば、虫眼鏡のアイコンは「検索」とラベル付けされるべきで、「虫眼鏡アイコン」としてはなりません。

要素の目的が状態に基づいて変化する場合(例:再生/一時停止ボタン)、状態が変化するたびに名前を更新してください。

XML

要素のテキストプロパティやコンテンツ説明を利用して、TalkBackが共有する正確な情報を確保します。

Button button = .......
button.setText("Button's Name");

ImageButton imageButton = .......
imageButton.setContentDescription("Button's Name");

Compose

画像ボタンにはコンテンツの説明やテキストを組み合わせて、要素の目的を示します。

@Composable
fun EmailIconButton() {
    IconButton(
        onClick = {},
    ) { 
        Icon(
            painter = painterResource(id = R.drawable.email_icon),
            contentDescription = “Send an Email”
        )
    }
}

非画像ボタンはTalkBackのためにテキストを提供すべきです。

@Composable
fun EmailButton() {
    Button(
        modifier = Modifier.semantics { this.contentDescription = “Send an Email” }
        onClick = {},
    ) { 
        Text(
            text = “Email”
        )
    }
}

React Native

このルールで見つかった問題を修正するには、インタラクティブ要素にaccessibilityLabelを追加します。

<TextInput
  ...
  accessibilityLabel="First Name"
/>

要素がView内でグループ化されている場合は、accessibleおよびaccessibilityLabelプロパティを追加します:

<View
   importantForAccessibility='no-hide-descendants'
   accessible={true}
   accessibilityElementsHidden={false}
   accessibilityLabel={"Dark Mode"}
   accessibilityValue={{ text: "" + isEnabled }}
   accessibilityRole='switch'
   onPress={() => { 
      setIsEnabled(!isEnabled) 
    }}
 >            
    <Switch
      trackColor={{ false: 'lightgray', true: 'dimgray' }}
      ios_backgroundColor={'lightgray'}
      thumbColor={'white'}
      onValueChange={ () => {
         setIsEnabled(!isEnabled)
      }}
      value={isEnabled}
      accessibilityElementsHidden={true}
     />
</View>

Flutter

IconButtontooltipプロパティを使用してアクセシブルな名前を提供します。これにより、名前がTalkBackでアナウンスされ、長押しで視覚ツールチップも表示されます。

  IconButton(
    icon: const Icon(Icons.search),
    tooltip: 'Search',
    onPressed: () {},
  )

アイコンのみの子を持つインタラクティブ要素には、semanticLabelを直接Iconに設定します:

  ElevatedButton(                                                                                                                                            
    onPressed: () {},
    child: const Icon(Icons.add, semanticLabel: 'Add item'),
  )

インタラクティブ要素と可視ラベルをグループ化するときは、MergeSemanticsでそれらをラップして、TalkBackがそれらを単一の焦点可能な要素として組み合わせるようにします:

  MergeSemantics(
    child: Row(
      children: [                                                                                                                                              
        const Text("Dark mode"),
        Switch(                                                                                                                                                
          value: _darkMode,                                                                                                                                  
          onChanged: (value) => setState(() => _darkMode = value),
        ),
      ],
    ),
  )

このルールを無視してもよいですか?

このルールはユーザーにとって非常に重要であり、無視すべきではありません。名前のないインタラクティブ要素は、最も基本的なアクセシビリティの失敗の一つです。TalkBackやVoice Accessのユーザーは、アクセシブルな名前がない要素を使用することが事実上できません。この問題のすべてのインスタンスを優先して解決し、より低い優先度の問題に取り組んでください。

よくある質問

TalkBackを使用しているときに、要素にフォーカスした後で内容を読み上げられます。このルールがまだ失敗するのはなぜですか? 要素に定義された名前がない場合、スクリーンリーダーはしばしばその値をアナウンスします。しかし、値は欠けているアクセシブルな名前の代わりにはなりません。

リソース

Deque Universityコースページ

  • 4.1.2a 名、役割、値 (A)の下にネイティブ モバイル Androidを参照

    注意: Deque Universityのリソースにフルアクセスするにはサブスクリプションが必要です。

その他のリソース