无障碍(Accessibility,简写为 A11y)是指通过技术手段构建可访问性,确保移动应用能够被各类人群平等访问的设计理念。
其核心目标是打破使用壁垒,让不同身体条件、感知能力及认知水平的用户都能顺畅获取信息与服务。
主流移动平台均提供完整的无障碍支持体系:iOS 和 Android 不仅原生集成了面向障碍用户的 API,还配备标准化辅助技术工具链,例如专为视障用户设计的屏幕阅读器(VoiceOver / TalkBack)。
在此基础上,Lynx 框架封装了跨平台无障碍接口,使开发者能够在 App 中集成无障碍功能,构建信息无障碍的移动生态。
不同平台在无障碍方面的设计与规范上会有所区别,因此 Lynx 的实现与体验也会因平台不同而存在一定的差异。
只有一个无障碍元件才能成功的被读屏软件(iOS 的 VoiceOver 和 Android 的 TalkBack)访问和聚焦。
不过,<text>
和 <image>
默认就是一个无障碍元件,无需任何操作,他们就可以被识别。
有时,可能希望自己控制无障碍元件的大小,或者是聚合一些无障碍信息,就需要自己控制哪些元件是无障碍节点。
使用 accessibility-element
标记一个元件是否可以成为一个无障碍元件,允许嵌套。
下面的例子中,只会存在一个无障碍焦点,并被阅读成 "Hello world"。
在 <text>
和 <image>
上,此属性被默认设置为 true
使用 accessibility-trait
可以标记一个无障碍元件的特征,可以是图片、按钮、文本中的任意一种。
使用 accessibility-label
可以调整一个无障碍元件被读屏软件朗读的内容。
在 <text>
上,默认朗读文本的内容
下面的例子中,元件们会被依次阅读成 "Hello lynx" 和 "I am an image displaying the Lynx icon"。
iOS 和 Android 系统都会默认以从上到下、从左到右的顺序排列各个无障碍元件,以便它们能够逐个被读屏软件访问。
使用 accessibility-elements
可以手动调整这个顺序,注意,要以逗号分割每个 id。
此外,如果父节点设置了 accessibility-elements
属性,那么仅可访问 accessibility-elements
属性指定 id 的子节点,其他子节点则不可以聚焦。
下面的例子中,无障碍元件们的顺序会被调整,会被依次阅读成 "Lynx" 和 "Hello"。
无障碍焦点发生变化的时候,可以通过一个全局事件 activeElement
来通知新聚焦节点的信息。
使用 requestAccessibilityFocus
提供主动聚焦到某个无障碍元件的能力。