背景
使用 TalkBack 屏幕阅读器的用户可以通过下列两种方式在应用中导航:
- 触摸浏览:在屏幕上拖动一根手指,探索各个元素的物理排列方式。
- 线性浏览:左右滑动以前后移动,一次访问一个元素。
Android 应用应当同时支持触摸浏览和线性导航。线性导航时的遍历顺序通常应符合视觉顺序,或者,您应该以其他对屏幕阅读器用户来说更有逻辑性的排序方式优化遍历顺序。
默认情况下,TalkBack 使用应用的视图层次结构来确定线性导航过程中界面元素的遍历顺序。
实现
如果应用的视图层次结构没有反映应用的逻辑结构,开发者可以设置 android:accessibilityTraversalBefore
或 android:accessibilityTraversalAfter
来影响无障碍功能遍历顺序。这些属性表明屏幕阅读器应该在访问一个视图的内容之前(或之后)访问另外一个视图的内容。不存在先后关系的视图将按照由屏幕阅读器确定的顺序进行遍历。
无障碍功能遍历顺序不同于键盘导航所用的“输入焦点”顺序。键盘导航顺序是由 android:nextFocusDown
、android:nextFocusLeft
、android:nextFocusRight
和 android:nextFocusUp
指定的。
在使用 accessibilityTraversalBefore
和 accessibilityTraversalAfter
时,请注意以下提示以避免过度限制遍历顺序:
- 只有在逻辑排序与视图层次结构排序不同的情况下才使用这些属性。
- 用户通过触摸浏览方式可以聚焦到的每个元素,在线性导航过程中也应该是可以聚焦的。
- 无论向前还是向后遍历,遍历顺序应与线性导航的顺序一致。例如,如果先通过手势将焦点移动到“下一个”元素,接着用另一个手势使焦点移动到“上一个”元素,最终焦点应始终返回到原来的元素。
- 在定义
accessibilityTraversalBefore
和accessibilityTraversalAfter
时不应引入循环,否则用户可能会遇到在使用线性导航时无法访问某些元素的情况。
设计
在设计应用时,请考虑一下您打算让使用屏幕阅读器的用户如何对界面中呈现的信息进行线性遍历。理想情况下,遍历顺序与信息的视觉呈现顺序应当保持一致。但是,如果无法保证这种一致性,您可以指定一种体现逻辑结构或界面意图的遍历顺序。
详细了解如何创建方便理解和操作的导航方式。
测试
要人工评估某个应用的无障碍功能遍历顺序,请执行以下操作:
- 开启 TalkBack。
- 打开应用。
- 使用线性导航手势将无障碍功能焦点移动到屏幕中的各个元素上。
- 验证 TalkBack 是否按照某种逻辑顺序使其焦点遍历屏幕上的各个元素,并在访问每个元素时朗读出有意义的表述内容。
- 验证 TalkBack 是否能以一致的方式沿着屏幕上的元素向后和向前移动焦点,而不论导航方向如何。
Android 的自动化测试工具可以检测出一些遍历顺序问题。您也可以考虑使用 Android 版无障碍功能扫描仪对设备上的应用进行人工测试。要实现自动化测试,请在 Espresso 和 Robolectric 中开启无障碍检查功能。