Android 无障碍与可操作性设计

举报
yd_217846120 发表于 2026/09/21 08:41:28 2026/09/21
【摘要】 Android 无障碍与可操作性设计无障碍不是发布前补充几条描述,而是让界面信息、操作顺序和状态变化能够被不同用户理解。读屏、键盘、放大显示和高对比需求会暴露许多普通视觉检查难以发现的问题。越早在公共组件中建立语义,业务页面的改造成本越低。 一、优先使用有语义的标准控件按钮应使用按钮组件,可输入内容使用输入组件。标准控件已经提供点击、焦点、禁用和读屏角色,自定义 View 模拟按钮时需要手...

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 无障碍的基础是标准控件、清晰语义和灵活布局。为图标提供动作描述,保证触控与焦点顺序,及时但克制地播报状态,再让自定义控件提供等价信息。把这些能力放进公共组件,能够让可访问性成为持续工程质量,而不是一次性修补。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。