“信息无障碍”,指任何人在任何情况下都能平等、方便、无障碍地获取信息并利用信息。主要用于互联网环境,大意是:互联网产品可以被老年人、视障者、听障者、读写障碍人士等用户(在中国,以上人群的总数,占中国人口数的20%左右)顺畅使用,同时可以更高效、更便捷地被所有用户使用。
此文档提供了在Android应用开发时应当考虑的信息无障碍需求、建议和注意事项,以帮助开发者更全面地检查应用的无障碍特性。
大多数情况下,Android应用开发的无障碍并无额外的代码重构,但需仔细考虑用户特性及应用交互等细节,所以,无障碍问题不仅仅是开发工程师、UI设计师、测试工程师应该考虑的,也是产品经理、决策者的责任。
此文档内容由国内信息无障碍领域的专业机构“信息无障碍研究会”提供。开发者若有兴趣了解信息无障碍相关的更多内容,可联系:梁振宇,Link@siaa.org.cn。
1. 信息无障碍需求
通过依次完成下列步骤以使应用做到基本的无障碍。
1.描述用户界面控件:为没有文本标签的用户界面控件提供描述性内容,尤其是ImageButton, ImageView 和CheckBox组件。使用android:contentDescription XML layout属性或者setContentDescription(CharSequence)方法来为Android辅助功能服务(accessibility service)提供信息(装饰性图形除外)。
2.采用以焦点为基础的页面导航:确保用户可以使用可控制方向的硬件或软件(轨迹球、键盘、导航手势等)来浏览您的页面布局。在某些情况下,需要使UI组件可获取焦点,或者改变UI组件的焦点获取顺序,以使其更符合用户操作逻辑。
3.自定义控件:若要为应用建立自定义控件,须为其设置无障碍功能接口并且提供此控件的内容描述。
4.不使用纯音频的反馈:音频反馈必须有一个次级反馈机制,来为听障用户提供支持。例如,短信接收的提示音必须伴随一个系统提示,通常为触觉反馈(如具备条件)或视觉提示。
5.测试:测试应用的无障碍情况时,请通过方向控制键或TalkBack(一款读屏软件,Android辅助功能服务之一)的触摸浏览功能来使用您的应用。
2. 信息无障碍建议
使用下列内容以提高应用整体的无障碍体验。
1.遵循Android设计指南中的信息无障碍条目:在构建布局之前,请查看并遵循Android设计指南中的信息无障碍条目。
2.使用Android内置的界面控件:条件允许的话,使用Android内置的界面控件,因为这些控件默认提供了无障碍支持。
3.注意临时的或自动隐藏的控件和通知:避免使用淡出或者定时消失的界面控件,如果您的应用需要这些功能,请为这些功能提供替代的反馈方式。应用推广
3. 特殊情况和注意事项
以下列表描述了使应用具有无障碍特性的一些特殊场景。阅读这个列表,以确认您的应用是否遇到了这些场景和需要注意的事项,并选择合适的技术进行处理。
1.文本域提示:对于EditText域,提供一个android:hint属性而不是内容描述(android:contentDescription属性),来帮助用户理解这个文本框需要输入什么内容,当文本框为空时这个属性尤为重要。且当用户向文本框输入信息时,允许输入的内容被TalkBack等读屏软件朗读。
2.带有视觉效果的自定义控件:如果您的应用中包含带有视觉效果的自定义控件(如日历控件),默认的无障碍服务是无法为用户提供良好的体验的,您应该考虑使用AccessibilityNodeProvider为控件提供虚拟的层级视图。
3.自定义控件和点击事件处理:如果自定义控件提供对用户触摸交互的处理,例如onTouchEvent(MotionEvent)对MotionEvent.ACTION_DOWN和MotionEvent.ACTION_UP的监听,并将之视为一次点击事件,您必须触发一个等同于一次点击事件的AccessibilityEvent事件,并为这个点击行为提供辅助功能服务。
4.改变功能的控件:如果应用中有button或者其他在正常用户行为中能改变功能的控件(例如,button从play变成了pause),确保button的android:contentDescription也对应做了改变。
5.为相关控件提供提示:当用户与一个提供单一功能的控件集(如DatePicker)内的某个控件交互时,需提供有效的音频反馈。
6.视频播放与字幕:如果应用提供视频播放功能,必须支持字幕以帮助听力障碍的用户理解信息。视频播放控件也必须清楚地表明字幕是否可用,并提供一个明确的方法以启用字幕。
7.添加无障碍特性的音频反馈:只使用Android的无障碍框架为应用提供无障碍特性的音频反馈,如TalkBack这样的辅助功能服务应该是为应用提供无障碍特性的音频提示的唯一服务。在XML Layout中,使用android:contentDescription属性来添加提示信息,这个属性也可以通过无障碍框架的API来动态的添加进去。例如,您的应用有自动翻页功能,您需要使用announceForAccessibility(CharSequence)方法来让talkback之类的辅助功能服务播放此信息的音频从而通知用户已翻页。
8.复杂视觉交互的自定义控件:对于提供复杂视觉交互或者非标准视觉交互的自定义控件,使用可为辅助功能服务提供简单交互模型的AccessibilityNodeProvider来提供一个层级视图。如果这种方法不可行,则考虑提供一个不同的无障碍的视图。
9.小控件:如果有比推荐最小触摸尺寸还小的控件在应用界面中,考虑使用ViewGroup把他们分组,并为之提供android:ntentDescription。
10.装饰性的图像与图形:应用界面内只作为装饰且不提供内容或者可供用户操作的元素,不应该有无障碍内容描述。
以上全部内容,仅供开发者作为考虑应用的无障碍的参考,若有疑问,可向信息无障碍领域专业人士寻求协助。
原创文章,作者:youou,如若转载,请注明出处:https://xue.youounet.com/1022.html