スイッチ名

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

確認する項目

すべてのSwitch要素は、TalkBackやVoice Accessなどの支援技術に対してその目的を説明するアクセシブルな名前を持つべきです。

失敗例 ❌

Android phone screen showing a settings-style list with a toggle switch. A TalkBack focus ring is around the switch. A speech bubble reads 'Off, Switch.'

スイッチにはアクセシブルな名前がありません。

TalkBack が読み取る内容は "Off, Switch."

Voice Access — ユーザーはスイッチをアクティブにするために話すべきラベルが見えません。

成功例 ✅

Android phone screen showing a settings-style list with a toggle switch labeled 'Dark Mode'. A TalkBack focus ring is around the switch and visible label. A speech bubble reads 'Dark Mode, Off, Switch.'

スイッチは⟦0⟧またはグルーピングを介して見えるテキストでラベル付けされています。 labelFor も読み取る内容は

TalkBack — ユーザーは「ダークモード」と話してスイッチをアクティブにします。 "Dark Mode, Off, Switch."

Voice Access — user speaks "Dark Mode" to activate the switch.

概要

  • このルールはユーザーに重大な影響を及ぼします
  • すべてのスイッチには、それが制御する内容を説明するアクセシブルな名前が必要です
  • 「ダークモード」のような名前は、名前がない場合よりもはるかに有用です
  • 名前は可能な限り、labelForやグルーピング技術を使用して、目に見えるラベルから取るべきです
  • スイッチに直接コンテンツ説明を設定するのは避けてください。ただし、状態(例:「オン」/「オフ」)が保持されている場合を除きます

ユーザーへの影響

視覚障害者やスイッチアクセスを使用する人々は、スイッチを操作する前にそれが何をするかを理解するためにアクセシブルな名前に依存しています。名前がないと、TalkBackは「オン」または「オフ」としか通知しません。このため、ユーザーは何を制御しているのかコンテキストを得られません。

note

スイッチとその見た目のラベルが別々の要素である場合、フォーカス順序が重要です。TalkBackがラベルの前にスイッチに到達すると、状態のみが通知され、名前が通知されません。labelForを使用するか、要素をグループ化して、名前とスイッチが1つとして通知されるようにしてください。

スイッチ名の問題を確認する

  1. TalkBackをオンにする
  2. Switch要素にフォーカスしようとしてみてください
  3. 次のいずれかが発生します。
    • アクセス不可: TalkBackは「オン」または「オフ」としか読み上げません。
    • アクセシブル: TalkBackはスイッチの名前をおよび「オン」または「オフ」として通知します。

問題を修正

支援技術がスイッチが制御する内容を通知できるように、スイッチにはアクセシブルな名前が必要です。最良の方法は、ラベルとスイッチをグループ化またはリンクし、それらが単一のアクセシブル要素として扱われるようにすることです。

XML

隣接する要素内にラベルを提供するか、スイッチにラベルをラップすることができます。また、contentDescriptionを操作することもできますが、TalkBackの通知用に「オン」と「オフ」の状態を保持するようにしてください。

layouts/activity.xml
<TextView
     android:id="@+id/label"
     android:text="@string/label_text"
     android:labelFor="@+id/switch">
<Switch
     android:id="@+id/switch"/>

...

strings.values/
<string name="label_text">Dark Mode</string>

Compose

TextSwitchを行のようなマージされたレイアウトにまとめます。スイッチの役割とトグル可能なモディファイアをTextに適用し、SwitchのセマンティクスをModifier.clearAndSetSemantics { }でクリアします。こうすることで、TalkBackは直接スイッチ要素ではなくラベルにフォーカスします。

val (isSwitchChecked, setSwitchState) = remember { 
    mutableStateOf(true) 
}

Row(modifier = Modifier.semantics(mergeDescendants = true) { }) {
    Text(
        text = "Get Emails",
        modifier = Modifier
            .toggleable(
                value = isSwitchChecked,
                onValueChange = { 
                    setSwitchState(!isSwitchChecked) 
                },
                role = Role.Switch
            )
    )

    Switch(
        checked = isSwitchChecked,
        onCheckedChange = { 
            setSwitchState(!isSwitchChecked) 
        },
        modifier = Modifier
            .clearAndSetSemantics { }
    )
}

React Native

React Nativeでスイッチとラベルを組み合わせるには、両方のコンポーネントをTouchableOpacityコンポーネントでラップします:

<TouchableOpacity
   onPress={() => {
     setSwitchOn(!switchOn)
     Alert.alert("Switch on : " + !switchOn)}}
   style={styles.subContainer}
   accessible={true}
   accessibilityLabel={"Subscribe"}
   accessibilityRole='switch'>
      <Text style={{ fontSize: 22 }}>
         Subscribe
      </Text>
      <Switch
         importantForAccessibility='no-hide-descendants'
         onValueChange={() => {
            setSwitchOn(!switchOn)
            Alert.alert("Switch on : " + !switchOn)} }
        value={switchOn}
   />
</TouchableOpacity>

すべてのユーザーに対してこれが正しく機能することを確認するために:

  • グループが一緒にフォーカスされるようにTouchableOpacityaccessible={true}を設定します
  • TouchableOpacityaccessibilityLabelプロパティが可視テキストラベルと正確に一致していることを確認してください
  • 正しい制御タイプを伝えるためにswitchaccessibilityRoleを設定します
  • Switch要素にimportantForAccessibility='no-hide-descendants'を設定して、個別にフォーカスできないようにします
  • スイッチがアクティブ化されたときの動作を処理するためにonPressアクションを追加します

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

スイッチ名はユーザーに重大な影響を持ちます。アクセシブルな名前がないスイッチは、スクリーンリーダーのユーザーに理解または使用されません。私たちはこの問題をすべてのケースで修正することを強くお勧めします。ルール無視について詳細を学ぶ。

リソース

Deque University コースページ

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

その他のリソース