内容标签

背景

无障碍服务(如屏幕阅读器)的用户依靠内容标签来了解界面中元素的含义。

在某些情况下(例如,信息以图形方式在元素中呈现),内容标签可以提供该元素的含义或相关操作的文字说明。

如果界面中的元素没有提供内容标签,则一些用户可能难以理解呈现给他们的信息或者无法在界面中执行操作。

实现

如果界面中使用了某些类型的 View,则应提供相应的内容标签,以说明该 View 的用途或相关的操作。

如何提供内容标签

android:contentDescription

如果使用 ImageViewImageButtonCheckBox 或其他以图形方式传达信息的 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 指南,阅读实现内容标签的相关信息。

设计

在设计界面时,请仔细思考如何为以图形方式呈现的内容添加标签,以方便用户使用无障碍服务。内容标签应该遵循以下准则:

  • 简明扼要地说明元素的含义或相关的操作。
  • 不要在内容标签中加入元素的类型或状态
  • 如果元素与某项操作相关,请说明具体操作,而非以图示说明。
  • 不要说明用户与元素的具体互动方法。

要了解详情,请参阅 Material Design 无障碍文案指南

测试

要手动验证应用的界面是否缺少内容标签,请执行以下操作:

  1. 开启 TalkBack。
  2. 打开应用。
  3. 使用线性导航手势将无障碍焦点移动到屏幕上的各个元素。
  4. 如果 TalkBack 将焦点移动到一些元素,但没有朗读相应元素有意义的呈现内容,或朗读“无标签”的消息,则说明该元素可能缺少内容标签。

Android 的自动测试工具能够检测出缺失的内容标签。不妨考虑使用 Android 版无障碍功能扫描仪对设备上的应用进行人工测试。要实现自动化测试,请在 EspressoRobolectric 中开启无障碍检查功能。