Accessibility(a11y)是一种创建可供残障人士使用的应用的实践。根据世界卫生组织的数据,超过13亿人(占人口的16%)患有某种形式的残疾。世卫组织(2024年报告)强调,数字无障碍正变得至关重要。让我们来看看如何在 iOS 和 Android 上确保无障碍,以及存在哪些标准。
关键要点
Accessibility(缩写 a11y — 字母 a + 11 个字母 + y)是产品可供残障人士使用的特性。在移动应用的上下文中,这意味着:支持屏幕阅读器(VoiceOver、TalkBack)、适当的文本大小、高对比度、正确的键盘导航焦点顺序,以及没有引起头晕的动画元素。
包容性不仅是道德义务,也是法律义务。许多国家都有数字无障碍法律:ADA(美国)、Section 508、European Accessibility Act(欧盟,从 2025 年起对应用强制要求)。根据 Business Disability Forum 的数据,投资于无障碍的公司可将其受众增加 15–20% 并降低法律风险。
在 IT Sectr,我们在开发的每个阶段都检查无障碍性。我们的经验表明:在设计阶段修复无障碍问题的成本比发布后低 10 倍。无障碍不是一个功能,而是现代应用的基本要求。
Apple 生态系统提供了强大的无障碍工具。VoiceOver 是一个内置的屏幕阅读器,可以朗读屏幕上发生的一切。用户通过手势控制设备:向右滑动 — 下一个元素,向左滑动 — 上一个元素,双击 — 激活。
Accessibility Label 是 VoiceOver 为某个元素阅读的文本。默认情况下,iOS 使用按钮文本或标签,但对于图标和图形元素,您需要显式设置标签。Accessibility Trait 是描述元素类型的属性:button(按钮)、header(标题)、link(链接)、image(图像)。正确的 traits 有助于用户理解如何与元素交互。
VoiceOver 支持 40 多种语言,适用于所有 Apple 设备。对于开发人员来说,最重要的是为每个界面元素设置正确的 accessibilityLabel 和 accessibilityTraits。如果某个元素不应被访问(装饰性图像),请设置 isAccessibilityElement = false。
// Swift — 为按钮设置无障碍
let shareButton = UIButton()
shareButton.setImage(UIImage(named: "share-icon"), for: .normal)
shareButton.accessibilityLabel = "分享本文"
shareButton.accessibilityHint = "打开选择发送方式的对话框"
shareButton.accessibilityTraits = .button
// SwiftUI — 更简单
struct ShareButtonView: View {
var body: some View {
Button(action: share) {
Image(systemName: "square.and.arrow.up")
}
.accessibilityLabel("分享")
.accessibilityHint("打开分享菜单")
}
}
代码显示了不带文本的按钮(仅图标)的无障碍设置。AccessibilityLabel 是用户将听到的内容。AccessibilityHint 是关于操作结果的额外提示。不要使用诸如「用于的按钮」之类的短语 — Trait 已经表明它是一个按钮。
TalkBack 是 Google 为 Android 提供的屏幕阅读器,是 Android Accessibility Suite 软件包的一部分。与 VoiceOver 一样,它可以朗读界面元素并通过手势控制。TalkBack 支持 100 多种语言,适用于所有具有 Google Play Services 的设备。
Content Description 是 Android 上 accessibilityLabel 的等效物。它通过 XML 中的 android:contentDescription 属性或代码中的 setContentDescription() 方法设置。对于不可聚焦的元素(装饰性 ImageView),请使用 importantForAccessibility="no"。
Focus Order(焦点顺序)是 TalkBack 在滑动时在元素之间移动的顺序。默认情况下,Android 使用布局中元素的顺序,但可以通过 accessibilityTraversalBefore 和 accessibilityTraversalAfter 属性更改。这对于具有自定义组件的复杂屏幕非常重要。
在 IT Sectr,我们在每个屏幕上检查 Focus Order。焦点顺序错误是最常见的无障碍问题之一。例如,如果用户在一个标题之后转到评论而不是文章文本 — 这是一个无障碍错误。
WCAG(Web 内容无障碍指南)是由 W3C 开发的国际无障碍标准。当前版本是 WCAG 2.2(2023 年)。该标准分为 4 个原则:Perceivable(可感知)、Operable(可操作)、Understandable(可理解)、Robust(稳健)— 缩写 POUR。
WCAG 级别:A(最低)、AA(中等,在欧盟具有法律强制性)、AAA(最高)。对于移动应用,AA 级别就足够了:文本对比度至少 4.5:1、支持屏幕阅读器、最小目标尺寸 44x44 像素、视频字幕。
A 级 — 基本要求:图像的文本替代、键盘控制、至少 3:1 的对比度。AA 级 — 中等:对比度 4.5:1、支持高达 200% 的缩放、正确的标题和标签。AAA 级 — 高级:对比度 7:1、视频的手语、完全语音控制。实际上,大多数公司都瞄准 AA。
| 参数 | iOS | Android |
|---|---|---|
| 屏幕阅读器 | VoiceOver | TalkBack |
| 元素标签 | accessibilityLabel | android:contentDescription |
| 元素类型 | accessibilityTraits | accessibilityRole(Compose)、焦点重要性 |
| 焦点顺序 | 自动(可更改) | accessibilityTraversalBefore/After |
| 文本缩放 | Dynamic Type(UIFontMetrics) | sp(scale-independent pixels) |
| 减少动态效果 | UIAccessibility.isReduceMotionEnabled | Settings.Global.getFloat(... ANIMATOR_DURATION_SCALE) |
表 2. iOS 和 Android 无障碍 API 的比较。尽管名称不同,但概念是相同的:标签、类型、焦点顺序和文本适配支持。
无障碍测试是检查应用是否符合 WCAG 标准以及能否与屏幕阅读器正常配合使用。最小测试集:启用 VoiceOver/TalkBack 并浏览应用的每个屏幕。通过聆听检查所有元素是否被朗读、焦点顺序是否合理以及不适当的元素(装饰性)是否被忽略。
自动化工具:Xcode Accessibility Inspector(iOS 的 Xcode 中的审查)、Android Accessibility Scanner(扫描屏幕并发现问题)、Axe DevTools、WAVE。这些工具检查对比度、目标尺寸、标签是否存在以及其他参数。
在 IT Sectr,我们在每次发布前进行无障碍审查。该流程包括:自动审查(Accessibility Inspector)、使用 VoiceOver 和 TalkBack 进行手动测试、对比度和文本缩放检查。我们将问题记录在 Jira 中并分配给 sprint。这使我们能够在所有项目中保持 WCAG AA 级别。
常见问题
设置 → 辅助功能 → VoiceOver。或者在启用辅助功能快捷键时,三次单击侧边按钮(或 Home 按钮)。要快速启用,请使用 Siri:「打开 VoiceOver」。在 Android 上,TalkBack 在设置 → 辅助功能 → TalkBack 中启用。
为了符合欧盟法律(从 2025 年起执行的 European Accessibility Act)和美国法律(ADA),需要 AA 级别。这意味着:对比度 4.5:1、所有元素都有标签、目标尺寸至少为 44x44 像素、支持屏幕阅读器、视频字幕。
是的。无障碍对每个人都有帮助:老年人、在明亮阳光下使用手机的用户、抱着婴儿的父母(单手操作)。此外,这在许多国家是法律要求。包容性扩大了受众范围并改善了所有人的用户体验。
使用这些工具:WebAIM Contrast Checker(在线)、适用于 Figma/Sketch 的 Stark。对于 WCAG AA,普通文本的最小比率为 4.5:1,大文本(18px 及以上)为 3:1。对于 AAA — 分别为 7:1 和 4.5:1。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。