チェックボックス名

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 - Serious

確認項目

すべてのチェックボックス要素には、TalkBackやVoice Accessなどの支援技術に利用可能な名前を設定する必要があります。

失敗例 ❌

CheckBox with no associated label

name = {none}

TalkBack は値と役割のみをアナウンスします
"Checked, CheckBox"

Voice Access - ユーザーが "ニュースレターを購読" と言います
名前がないため、これはチェックボックスをアクティベートしません

成功例 ✅

CheckBox with an associated label

name = "ニュースレターを購読"

TalkBack はアナウンスします the name, value, and role
"ニュースレターを購読, Checked, CheckBox"

Voice Access - ユーザーが "ニュースレターを購読" と言います
名前が一致するため、これはチェックボックスをアクティベートします

概要

  • このルールはユーザーに大きな影響を与えます
  • すべてのチェックボックスには名前が必要です:TalkBackやVoice Accessを利用するユーザーはチェックボックスを識別し、操作できる必要があります
  • 視覚的なラベルを関連付けてください:チェックボックスにリンクされたTextView(XML)またはTextコンポーネント(Compose)を使用します
  • TextContentDescriptionプロパティを同時に使用しないでください — これらは互いに競合します

ユーザーへの影響

このルールで検出された問題は、TalkBackやVoice Accessなどの支援技術を使用している人々に最も影響があります。

CheckBoxにアクセス可能な名前がない場合、TalkBackは値と役割だけをアナウンスします — 例えば、「Checked, CheckBox」— ユーザーは選択している内容のコンテキストがわからず、追加の探索なしではそのコントロールの目的を理解することが不可能になり、Voice Accessユーザーはラベルを話すことでチェックボックスをアクティベートできなくなります。

CheckBox名前の問題を確認

  1. TalkBackをオンにします
  2. コントロールをフォーカスしようとする
  3. 次のいずれかが発生します。
    • 非アクセス可能: TalkBackは値と役割のみを発表します。
    • アクセス可能: 名前と値の両方がTalkBackによって読み上げられます。

問題を修正

CheckBox名前の問題を解決するには、すべてのチェックボックスにアクセス可能な名前を持たせ、視覚的なテキストラベルを関連付けてください。これにより、TalkBackはチェックボックスの値と役割に加えて意味のある名前をアナウンスします。Voice Accessのユーザーは、ラベルを話してチェックボックスをアクティベートできるようになります。

XML

TextViewCheckBoxlabelFor属性を使用して関連付けます。これにより、視覚的なラベルがチェックボックスにリンクされ、TalkBackがチェックボックスのアクセス可能な名前としてラベルテキストをアナウンスします。

  <LinearLayout
      android:layout_width="wrap_content"                                       
      android:layout_height="wrap_content"
      android:orientation="horizontal">                                         
                                                                              
      <CheckBox                                                               
          android:id="@+id/subscribe_checkbox"
          android:layout_width="wrap_content"                                   
          android:layout_height="wrap_content" />
                                                                                
      <TextView                                                               
          android:layout_width="wrap_content"                                 
          android:layout_height="wrap_content"
          android:text="Subscribe to newsletter"                                
          android:labelFor="@id/subscribe_checkbox" />
                                                                                
  </LinearLayout>  

ビューがプログラム的に作成される場合、またはXMLで関連付けできない場合は、コード内でラベルをチェックボックスにリンクするためにsetLabelForを使用してください。

TextView label = findViewById(R.id.checkbox_label);
CheckBox checkBox = findViewById(R.id.subscribe_checkbox);
label.setLabelFor(checkBox.getId());
warning

すでに視覚的なテキストラベルを使用している場合、ContentDescriptionCheckBoxに設定しないでください。両方が存在すると、TalkBackはContentDescriptionの値を読み上げ、ラベルを無視してしまい、画面に表示されるものとアナウンスされるものが不一致になります。

Compose

Checkboxとテキスト要素をCheckboxのアクセシビリティ役割を持つ親要素内にラップし、チェックボックスのアクションが親要素を選択することにより実行されるようにしてください。

Row(modifier = Modifier
    .toggleable(
        value = checkedState,
        enabled = true,
        role = Role.Checkbox, // Parent element has the accessibility role
        onValueChange = { setCheckBoxState(!checkedState) } // 
    )
    .semantics(mergeDescendants = true) { }
    .constrainAs(labeledTextField) {
        setConstraints(top = parent.top, start = parent.start, end = parent.end)
    }
) {
    Checkbox(
        checked = checkedState,
        modifier = Modifier.padding(16.dp),
        onCheckedChange = null
    )

    Text(text = "Get Marketing emails", modifier = Modifier.padding(16.dp))
}

React Native

注:React Nativeのチェックボックスコンポーネントは廃止されましたので、サードパーティのチェックボックス要素を使用する場合やカスタム要素を作成する場合のみ適用されます。

React Nativeでチェックボックスとラベルを組み合わせるには、TouchableOpacity内で両方の要素をラップできます:

<TouchableOpacity
   style={{flexDirection:'row', alignItems: 'center',}}
   onPress={() => {
     setSelection(!isSelected)
     }
   }
   accessible={true}
   accessibilityLabel={"Do you like React Native?"}
   accessibilityRole='checkbox'>
     <CheckBox
       importantForAccessibility='no-hide-descendants'
       value={isSelected}
       onValueChange={setSelection}
       style={styles.checkbox}
      />
     <Text>Do you like React Native?</Text>
</TouchableOpacity>

これがすべてのユーザーに正しく機能するようにするためには:

  • accessible={true}TouchableOpacityに設定し、支援技術がグループを単一の要素としてフォーカスするようにします
  • accessibilityLabelを視覚的なテキストラベルと正確に一致するように設定します
  • accessibilityRolecheckboxに設定し、支援技術のユーザーに正しいコンテキストを提供します
  • importantForAccessibility='no-hide-descendants'CheckBoxに設定し、個々にフォーカスできないようにします
  • チェックボックストグルを処理するためのonPressアクションをTouchableOpacityに追加します

このルールを無視しても良い?

CheckBox Nameにはユーザーに対する重大な影響があり、ほぼすべてのケースでこの問題を改善することをお勧めします。アクセス可能な名前を持たないチェックボックスは支援技術ユーザーにコンテキストを提供せず、Voice Accessのインタラクションを完全に妨げます。ルールの無視について詳しく学んでください。

リソース

Deque University コースのページ

  • ネイティブモバイルAndroidをご覧ください 4.1.2 名前、役割、値 (A)

    注:Deque Universityリソースへの完全なアクセスにはサブスクリプションが必要です。

その他のリソース