android - 如何让 TalkBack 按顺序读取 Android 辅助功能事件而不切断它们
问题描述
我有一个过滤器视图,在关闭时,我想做 2 个可访问性的事情:
- 宣布“$listSize items in list”,因为应用过滤器会改变列表大小
- 将焦点设置为“添加过滤器”按钮
我尝试了以下方法:
filtersButton.announceForAccessibility("$listSize items in list")
filtersButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
我希望 TalkBack 按顺序阅读:
- “列表中有 20 项”
- “过滤器按钮”
但是,它通常会跳过第一次读出,只阅读filtersButton
. 有时它会在跳到第二个之前只读取第一个的一部分。
如何强制 TalkBack 读出两个辅助功能事件?
解决方案
使文本和可听信息相似是一种很好的做法,也是一种推荐的方法。尽量避免公告,而是让屏幕阅读器阅读显示的信息。该方法announceForAccessibility()
旨在通知视觉变化,否则会被忽视。
您的屏幕上是否有显示项目总数的视图?如果您对项目数量没有直观的线索,则不应在 TalkBack 上公布。要么信息很重要,您应该将其直观地呈现给所有用户,要么信息不那么重要,不能在屏幕上显示,不应该在屏幕阅读器上公布。
如果它在屏幕上可见,您可以使用AccessibilityLiveRegion
让阅读器宣布更改的值,并将焦点保持在Add filters
按钮上。另一种方法是简单地将第一个焦点设置到显示项目列表计数的视图,然后让用户导航到下一个按钮。
ViewCompat.setAccessibilityLiveRegion(itemCountTextView, ACCESSIBILITY_LIVE_REGION_POLITE)
推荐阅读
- python - 如何在python中解压(取消列出)没有for循环的列表?
- powershell - 如何使用 PowerCLI 获取与数据存储和数据存储集群关联的事件?
- java - 执行 default-testResources
- node.js - 节点将大文件流式传输到 mongodb
- php - 在带有 PHP 7.0 和 PHP 7.4 的 Ubuntu 16.04 上启用 soap 7.0
- vue.js - Nuxt/Jest - 语法错误:意外的令牌 {
- flutter - 如何在 Flutter 中使用 GetX 监听 FocusNode
- xml - 使用 XSLT 过滤不包含节点的 XYZ
- angular - 我已经嘲笑了该服务,为什么在不注入服务依赖项的情况下仍然会出错?
- lua - 你如何发射沿弯曲角度跟随的射弹