无障碍服务(如屏幕阅读器)的用户依靠内容标签来了解界面中元素的含义。
在某些情况下(例如,信息以图形方式在元素中呈现),内容标签可以就该元素的含义或相关操作提供文字说明。
如果界面中的元素没有提供内容标签,则一些用户可能难以理解呈现给他们的信息或者无法在界面中执行操作。
实施步骤
视图如果界面中使用了某些类型的 View
,则应提供相应的内容标签,以说明该 View
的用途或相关的操作。
如何提供内容标签
android:contentDescription
如果使用 ImageView
、ImageButton
、CheckBox
或其他以图形方式传达信息的 View
,请使用 android:contentDescription
属性为该 View
提供内容标签。
内容标签有时取决于仅在运行时呈现的信息;View
的含义也可能随时间不断变化。例如,在音乐播放期间,播放按钮可能变为暂停按钮。在这种情况下,请使用 View#setContentDescription(CharSequence contentDescription)
适时更新内容标签。
一般情况下,如果无障碍服务提供关于 ViewGroup
的说明,则会将来自其子 View
的内容标签合并在一起。如要覆盖此行为,并指明您希望为该项及其不可聚焦的子 View
提供您所需的说明,请在 ViewGroup
上设置 contentDescription
。在 ViewGroup
上设置时,您可能需要在 contentDescription
中包含子 View
的内容标签。
android:hint
对于 EditText
或可编辑的 TextView
,请使用 android:hint
属性指明文本字段的用途。您不得将 android:contentDescription
用作可编辑 View
的内容标签。
android:labelFor
使用 android:labelFor
属性指明某个 View
应该用作其他 View
的内容标签。
不需要内容标签的情况
在某些情况下,不得专门提供内容标签:
TextView
(或其子类)中呈现的文字会自动提供给无障碍服务,通常不需要提供额外的内容标签。- 装饰性图片或并非以图形方式传达有意义信息的图片不需要内容标签。在这些情况下,请将
android:contentDescription
属性设置为“@null
”或将android:importantForAccessibility
属性设置为“no
”。
如要了解详情,请参阅 Android 开发者培训和 API 指南,阅读实现内容标签的相关信息。
如果界面中使用了某些类型的可组合项,则应包含相应的内容标签,以说明该可组合项的用途或相关的操作。
如何提供内容标签
内容说明
如要为图片
、图标
或其他传达图形信息的低级可组合项提供内容标签,请设置内容说明。
- 内容标签可能取决于运行时信息,因而可组合项的含义可能会发生变化。例如,在音乐播放期间,播放按钮可能变为暂停按钮。
- 在这些情况下,请使用“状态”,以便 Compose 可以观察内容说明中的更改并使用新值进行重组。了解如何使用“状态”和 Jetpack Compose。
- 在某些情况下,您可能希望将多个元素合并为单个可聚焦元素,并在其中合并其后代元素的内容标签。了解如何合并元素。
label 参数
某些可组合项(如 TextField
)支持可选的 label
参数。设置 label 后,元素会显示传递到该 label
的可组合项。无障碍服务可用于描述可组合项。
不需要内容标签的情况
在某些情况下,不得添加内容标签:
Text
中呈现的文字或包含Text
的其他可组合项会自动提供给无障碍服务。- 装饰性图片或并非以图形方式传达有意义信息的图片。
- 在这些情况下,请将
contentDescription
参数或Modifier.semantics#contentDescription
属性设为null
或者调用Modifier#clearAndSetSemantics
。
- 在这些情况下,请将
设计
在设计界面时,请仔细思考如何为以图形方式呈现的内容添加标签,以方便用户使用无障碍服务。内容标签应该遵循以下准则:
- 简明扼要地说明元素的含义或相关的操作。
- 不要在内容标签中加入元素的类型或状态。
- 如果元素与某项操作相关,请说明具体操作,而非以图示说明。
- 不要说明用户与元素的具体互动方法。
如要了解详情,请参阅 Material Design 无障碍文案指南。
测试
如要手动验证应用的界面是否缺少内容标签,请执行以下操作:
- 开启 TalkBack。
- 打开应用。
- 使用线性导航手势将无障碍功能焦点移动到屏幕中的各个元素上。
- 如果 TalkBack 将焦点移动到一些元素,但没有朗读关于相应元素的有意义的描述,或朗读“无标签”消息,则说明该元素可能缺少内容标签。
Android 的自动测试工具能够检测出缺失的内容标签。您也可以考虑使用 Android 版无障碍功能扫描仪对设备上的应用进行人工测试。如要实现自动化测试,请在 Espresso 和 Robolectric 中开启无障碍检查功能。