Android 无障碍与可操作性设计
Android 无障碍与可操作性设计
无障碍不是发布前补充几条描述,而是让界面信息、操作顺序和状态变化能够被不同用户理解。读屏、键盘、放大显示和高对比需求会暴露许多普通视觉检查难以发现的问题。越早在公共组件中建立语义,业务页面的改造成本越低。
一、优先使用有语义的标准控件
按钮应使用按钮组件,可输入内容使用输入组件。标准控件已经提供点击、焦点、禁用和读屏角色,自定义 View 模拟按钮时需要手动补齐这些能力。
如果项目已有统一基础控件,应在基础层处理语义和状态,不让每个业务页面重复实现。
二、图标需要准确描述
只有图标、没有可见文字的操作,需要提供简短且描述动作的内容说明,例如“关闭”“删除订单”。不要把文件名或“按钮图片”作为说明。
<ImageButton
android:layout_width="48dp"
android:layout_height="48dp"
android:contentDescription="@string/action_close"
android:background="?attr/selectableItemBackgroundBorderless" />
纯装饰图形不应重复朗读,可以标记为不重要,让读屏焦点停留在真正有意义的元素上。
三、文本布局保持灵活
按照项目适配规范,TextView 宽高优先使用 wrap_content,字号使用 dp,并通过约束控制最大范围,避免长文本被固定尺寸裁剪。
<TextView
android:id="@+id/statusText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:maxLines="2"
android:ellipsize="end"
app:layout_constrainedWidth="true"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
文字不应绘制在图片中。长中文、英文、连续数字和系统显示尺寸变化都需要实际验证。
四、扩大触控区域
视觉图标可以较小,但触控区域需要足够。优先使用带内边距的父容器或项目统一按钮组件,而不是精确点击图标像素。
相邻按钮之间应留出间距,避免误触。扩大点击范围后还要确认多个区域不会重叠,否则事件结果会依赖视图顺序。
五、组织读屏顺序
默认焦点顺序通常跟随视图结构。视觉上重新排列元素后,读屏顺序可能变得混乱。布局层级应尽量与阅读顺序一致,确实需要调整时再使用项目兼容方式定义遍历顺序。
一张卡片中如果多个文本共同描述同一对象,可以由容器组合语义,减少用户逐项滑动;但卡片内部存在不同操作时,不能把所有元素合并成一个焦点。
六、状态变化需要被感知
加载完成、提交失败和金额更新等动态变化,视觉用户可以看到,读屏用户需要合适通知。
fun showSubmitResult(message: String) {
binding.resultText.text = message
binding.resultText.announceForAccessibility(message)
}
通知不能过于频繁。行情等高频变化不应每次朗读,否则用户无法操作。只播报用户触发且重要的结果。
七、不要只依赖颜色
上涨与下跌、成功与失败、必填与可选,都应同时通过文字、符号或形状表达。色觉差异用户和高亮环境下,颜色可能无法提供足够信息。
前景与背景需要保持合理对比度,深色主题、禁用状态和透明叠层都要单独检查。
八、自定义 View 补齐语义
自定义图表或滑块需要设置可访问性角色、当前值和允许操作。点击型自定义 View 应重写 performClick,手势处理成功后调用它。
复杂图表不能只朗读“图表”。可以提供摘要、当前选中点和左右移动操作,让用户获得与视觉浏览等价的核心信息。
新无障碍 API 需要确认项目最低兼容版本,优先沿用已有兼容辅助类。
九、支持键盘和方向控制
平板、电视模式和外接键盘用户可能不使用触屏。关键操作需要能获得焦点,焦点样式清晰,确认键和返回键行为符合平台习惯。
自定义焦点移动规则前,应先验证默认算法是否已经正确,避免添加难以维护的固定关系。
十、建立测试流程
建议覆盖:
- 开启读屏后完整走通核心业务。
- 不看屏幕,仅依靠朗读完成操作。
- 焦点顺序与视觉顺序一致。
- 图标按钮说明准确且不重复。
- 错误与加载完成能被感知。
- 放大显示后文字不重叠或裁剪。
- 深色主题和高对比场景仍可辨识。
- 外接键盘能够到达并触发关键控件。
总结
Android 无障碍的基础是标准控件、清晰语义和灵活布局。为图标提供动作描述,保证触控与焦点顺序,及时但克制地播报状态,再让自定义控件提供等价信息。把这些能力放进公共组件,能够让可访问性成为持续工程质量,而不是一次性修补。
- 点赞
- 收藏
- 关注作者
评论(0)