スイッチ名
すべてのスイッチ要素には、TalkBackやVoice Accessなどの支援技術に対応するために、アクセス可能な名前が必要です。
影響
スイッチには、オンまたはオフにした時の状況や期待される結果を提供する名前が必要です。特に視覚障害者や視覚に障害のある方にとって、これが重要です。
スイッチとその名前のフォーカス順序によって、問題が生じる可能性があります。
確認
- TalkBackをオンにする
- コントロールにフォーカスしようとします
Switch。 - 次のいずれかが発生します。
- アクセス不可: 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
以下の例では、TextとSwitchをRowのような結合されたComposeレイアウトにまとめます。テキストにスイッチロールとトグル可能なモディファイアを追加し、 Modifier.clearAndSetSemantics { } を使用してSwitchのセマンティクスをクリアすると、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>これが正しく機能し、支援技術と非支援技術のユーザーの両方に必要なコンテキストを提供することを確認します:
-
ビューが
TouchableOpacityプロパティをtrueに設定し、支援技術ユーザーのためにグループが一緒にフォーカスされるようにします。accessibleEnsure the -
コンポーネントのプロパティがテキストラベルとまったく同じ値に設定されていることを確認します。
accessibilityLabelTouchableOpacity -
コンポーネントの
TouchableOpacityをaccessibilityRoleに設定して、支援技術ユーザーに正しいコンテキストを提供してください。switch -
コンポーネントの
SwitchプロパティをimportantForAccessibilityに設定して、コンポーネントが個別にフォーカスされないようにします。no-hide-descendants -
を通してアクションを追加し、
onPressコンポーネントにスイッチがアクティブになった際の動作を処理させます。TouchableOpacity
