不支持的界面元素类型
背景
屏幕阅读器和其他无障碍服务可能会朗读出某些界面元素类型的相关信息。
例如:
- 屏幕阅读器可以在读出与某个
CheckBox
相关联的标签之后说出“复选框”,提示用户该元素是一个可以选中或取消选中的复选框。 - 盲文显示屏可以在与某个
Button
相关联的标签周围放置方括号,提醒用户该元素是一个交互式按钮。
实现
应用界面中的元素是通过填充 AccessibilityNodeInfo
来向无障碍服务提供信息的。要传递元素的类型,请使用与最相似的规范类名称所对应的值来设置其 className
,您可以从 Android SDK 或支持库里提供的类型中进行选择。
下表列出了一些常见的示例。请注意,该表并未列出所有元素类型,并且不同的服务支持描述的微件类型也不尽相同。
界面元素类型示例 | AccessibilityNodeInfo 类名称 |
---|---|
按钮 | android.widget.Button |
切换按钮 | android.widget.ToggleButton |
单选按钮 | android.widget.RadioButton |
复选框 | android.widget.CompoundButton |
编辑框 | android.widget.EditText |
图片 | android.widget.ImageView |
进度条 | android.widget.ProgressBar |
下拉列表 | android.widget.Spinner |
在大多数情况下,类名称是由 View
的基本实现设置的,您不需要执行任何额外的工作。但是,应用偶尔会使用自定义视图来提供自己的 AccessibilityNodeInfo
呈现形式,例如:
- 当应用使用了一个扩展 View 并且实现了
onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info)
的类时 - 当应用使用了一个已实现
onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info)
的AccessibilityDelegate
时 - 在实现了
ExploreByTouchHelper
的应用中
在应用提供自己的 AccessibilityNodeInfo
呈现形式的情况下,请务必提供一个能够最贴切地描述界面元素类型的类名称。类名称应该与扩展 android.view.View
并且在 Android SDK 或支持库中存在的类相符。
重要提示:Android 的无障碍服务无法加载应用的软件包中的类,因此请不要设置由您自己的应用所提供的类名称。
请避免使用 android:contentDescription
或 AccessibilityNodeInfo
中的其他字段来描述界面元素的类型。虽然这种方法可能似乎适合某一种类型的无障碍服务,但对于其他类型的无障碍服务而言,却可能引发一些问题。详细了解带类型或状态标签的界面元素。
设计
在设计新颖或自定义的界面元素时,请考虑一下应该如何向使用无障碍服务的用户呈现这些元素。您要确定哪种类型的由 Android 提供的界面元素最能体现您的设计。
测试
Android 无障碍服务使用多种不同的策略来向用户描述界面元素的类型。在很多情况下,该服务可能会选择不提供任何有关界面元素类型的额外说明,但用户又期望获得这类说明。
要手动找出与未知界面元素类型相关的问题,您可以使用 Android 的无障碍服务测试您的应用。这样就能够发现由于省略了界面元素类型而导致界面不好用或难以理解的情况。要解决这些问题,您可以在元素的 AccessibilityNodeInfo
呈现形式中提供一个合适的类名称,或更改元素的标签,使其描述更容易理解。
Android 的自动化测试工具可以检测出一些不受支持的界面元素类型。您也可以考虑使用 Android 版无障碍功能扫描仪对设备上的应用进行人工测试。要实现自动化测试,请在 Espresso 和 Robolectric 中开启无障碍检查功能。