Android 可访问性 VPAT 改进实践
Android 可访问性 VPAT 改进实践
背景
VPAT(Voluntary Product Accessibility Template,自愿性产品可访问性模板)是一份用于说明产品与可访问性标准对齐程度的文档。它的主要作用,是帮助客户在采购软件前了解产品的可访问性能力,从而做出更充分的判断。
在一次重要 UI 改版之后,团队于 2024 年委托第三方可访问性供应商进行了 VPAT 评估。评估覆盖 Android、iOS 和桌面端,并发现了多类可访问性问题。
其中,Android 端一些较明确、可直接处理的问题,例如颜色对比度不足、图片缺少标签等,被立即分配给相关团队修复。对于剩余问题,团队进一步开展了系统化分诊,归纳出若干反复出现的主题,并制定修复策略。
识别出的主要问题
本次 Android 可访问性问题主要集中在以下方向:
- 已解决:P1,错误消息无法被屏幕阅读器感知
- 已解决:P2,标题未被正确识别
- 已解决:P2,编辑输入框缺少可访问性标签
- 已解决:P2,列表项数量播报不正确
- 已解决:P2,工作区切换器中的拖拽操作不可访问
- 已解决:P2,删除线信息未传达给屏幕阅读器用户
- 已解决:P3,仅通过颜色表示错误状态
- 待探索:P3,键盘导航与焦点管理
关于键盘导航,团队认为它可以帮助存在运动障碍或视觉障碍的用户在 Android 上使用产品,且在平板等更大屏设备上更常见。VPAT 中收到了多项与键盘导航相关的问题,但当前 Android 端尚未支持大屏形态,因此团队决定继续探索更符合推荐实践与标准的方案。
问题一:错误消息无法被屏幕阅读器感知
问题描述
当用户在编辑输入框中输入无效内容并点击“下一步”或提交时,界面会显示错误消息,但使用屏幕阅读器的用户无法获知错误状态。
理想情况下,当焦点进入该输入框时,TalkBack 应该播报该控件处于错误状态,并读出对应错误消息,让用户理解为什么出错。
解决思路
在 Android 端,错误信息主要通过两种方式展示:
- 显示在编辑输入框正下方;
- 通过错误横幅展示。
在这两种情况下,TalkBack 原本都不会主动播报错误,用户必须在屏幕中逐项滑动,才能判断发生了什么。
针对第一种情况,团队修改了 OutlinedTextField,让输入框下方的错误信息能够被播报。
针对第二种情况,团队更新了错误类型的 SKBanner,使错误出现时能够向屏幕阅读器用户播报。
这一类修复的关键点在于:错误不仅要在视觉上出现,也要进入辅助技术能够理解和传达的语义层。
问题二:标题未被正确识别
问题描述
部分页面标题没有传达清晰的语义信息,导致屏幕阅读器用户难以快速理解页面结构,也不便于高效导航。
明确标题语义可以帮助辅助技术表达内容的层级组织,并为用户提供另一种导航方式。
解决思路
团队识别并修复了列表中缺失标题语义的问题,例如偏好设置页面中的部分标题。
第三方供应商也建议将顶部应用栏中的标题标记为标题。不过,团队在测试其他 Android 应用后发现,这种模式并不符合 Android 平台上的一致实践,因此关闭了相关问题。
这里体现出一个重要取舍:可访问性修复不仅要回应检查项,也需要结合平台标准和用户预期,避免引入不一致的交互语义。
问题三:编辑输入框缺少可访问性标签
问题描述
部分编辑输入框没有永久可见的标签,而是依赖占位符文本来说明用途。用户开始输入后,占位符会消失。
这会影响部分有认知障碍的用户:当占位符消失后,他们可能忘记该输入框的目的。
解决思路
团队在修复过程中遇到了一些需要设计团队和屏幕阅读器用户共同参与判断的复杂场景,重点关注了主搜索框和消息输入区域。
对于消息输入区域,由于空间限制,暂时无法采用最优方案。
对于搜索框,团队选择了一个简单但有效的改动:增加明确的搜索图标。这样,即使用户已经输入文本,仍然可以通过图标判断该编辑框用于搜索。
这一改动虽然较小,但能提升输入框用途的可识别性,改善整体使用体验。
问题四:列表项数量播报不正确
问题描述
当 TalkBack 用户开启“始终播报列表项数量”设置并浏览列表时,TalkBack 会播报错误的列表项数量。
解决思路
例如,一个底部弹层中实际有 5 个可操作行项目和 2 个分隔线,TalkBack 会播报“列表中有 7 项”,而不是预期的“列表中有 5 项”。
这类问题提醒我们:装饰性元素不应进入辅助技术的结构化信息中,否则会误导依赖屏幕阅读器的用户。
问题五:工作区切换器中的拖拽操作不可访问
VPAT 还发现,工作区切换器中的拖拽操作存在可访问性问题。拖拽本身对部分用户并不友好,尤其是依赖辅助技术或无法进行精细手势操作的用户。
团队将其列为 P2 问题并完成修复。此类问题通常需要为拖拽提供替代操作路径,使用户不依赖单一手势也能完成同样任务。
问题六:删除线信息未传达给屏幕阅读器用户
部分文本中的删除线信息没有被传达给屏幕阅读器用户。对于视觉用户而言,删除线通常表示内容被移除、废弃或状态发生变化;但如果辅助技术没有播报这一格式信息,屏幕阅读器用户就可能错过重要语义。
团队将该问题列为 P2 并完成修复,使删除线承载的信息能够被辅助技术用户感知。
问题七:仅通过颜色表示错误状态
VPAT 还发现部分错误状态仅通过颜色表达。仅依赖颜色传递信息会影响色觉差异用户,也会影响在高对比度、弱光或其他特殊环境下使用产品的用户。
团队将该问题列为 P3 并完成修复。更稳妥的做法是同时使用文本、图标、状态语义等多种方式表达错误,而不是只依靠颜色。
经验总结
这次 Android 可访问性改进呈现出几个值得借鉴的方向:
-
优先处理明确且影响大的问题
例如颜色对比度、图片标签、错误播报等问题,可以快速分配给责任团队并推进修复。 -
让视觉状态进入语义层
错误提示、删除线、标题结构、列表项数量等,都不应只停留在视觉表现上,还需要能被辅助技术理解。 -
不要把装饰元素误暴露给辅助技术
分隔线等装饰性元素如果被当作列表项,会直接干扰屏幕阅读器用户对页面结构的判断。 -
修复方案需要结合平台惯例
并非所有外部建议都应机械采纳。对于顶部应用栏标题是否应标记为标题,团队通过对比其他 Android 应用后,选择遵循平台一致性。 -
设计约束需要被纳入可访问性决策
输入框标签问题并不总能用同一种方式解决。空间限制、用户理解、视觉设计和屏幕阅读器体验都需要共同权衡。 -
可访问性不是一次性清单,而是持续工程实践
键盘导航与大屏支持仍需要后续探索,说明 VPAT 更像是发现问题和推动系统改进的过程,而不是终点。
结语
这次 VPAT 过程暴露的问题并不罕见:错误提示未播报、标题语义缺失、占位符替代标签、装饰元素污染列表结构、仅靠颜色表达状态等,都是移动端产品中容易出现的可访问性缺陷。
有价值的地方在于,团队没有只停留在逐项修 bug,而是将问题归类、分析成因,并在平台规范、设计约束和辅助技术体验之间做出取舍。这种处理方式对其他 Android 产品改进可访问性同样具有参考意义。
