每当您设计Android应用程序时,您都希望有尽可能多的人下载和使用该应用程序,但这只有在所有人都可以访问您的应用程序的情况下才能发生,包括通过辅助功能访问其Android设备的用户或体验移动应用程序的用户没有颜色或声音等元素。

在上一篇有关创建可访问的Android应用程序的文章中 ,我向您展示了如何通过针对每个Android设备中内置的可访问性功能优化应用程序,为使用您的应用程序的每个人提供最佳体验。 我还将介绍可访问性最佳做法,以及如何在将应用程序发布到全世界之前真正地对应用程序的可访问性进行测试。

在完成本文时,您将知道如何创建与屏幕阅读器,方向控件和Switch设备以及其他方便的Android无障碍功能(如隐藏式字幕)集成的应用程序。

支持辅助技术

辅助技术或辅助功能是使设备更易于访问的软件或硬件。 Android内置了许多辅助功能,人们可以下载或购买许多应用程序甚至外部设备,以使其Android设备更好地满足他们的需求。

与优化Android应用程序以使其在触摸屏和其他屏幕配置下正常工作的方式相同,您应该针对这些辅助功能优化应用程序。

优化辅助技术是创建可访问应用程序中最重要的步骤之一,因此,在本节中,我将介绍所有主要的可访问性服务,并说明如何优化您的应用程序以为每种服务提供更好的体验。

支持屏幕阅读器

视力有障碍的用户可以使用屏幕阅读器与他们的Android设备进行交互,该屏幕阅读器是一种语音合成器,可以随着用户在屏幕上移动而大声朗读文本。

Android的最新版本通常预装了Google的语音合成(TTS)引擎。 要检查您的设备上是否安装了TTS:

  • 打开设备的“设置”应用。
  • 导航到“ 辅助功能”>“文本到语音输出”
  • 检查“ 首选引擎”值-该值应设置为Google文本语音引擎

TTS引擎为各种屏幕阅读器提供动力,包括Google的TalkBack(我将使用的屏幕阅读器):

  • 从Google Play商店下载Google TalkBack 。
  • 导航至设置>辅助功能
  • 选择“ 话语提示”
  • 将滑块推到“ 打开”位置。

如果您拥有三星设备,则可能已预安装了语音助手屏幕阅读器。 语音助手是Google TalkBack的端口,具有许多相同的功能,因此,如果您已经可以访问语音助手,则通常不需要安装TalkBack。

在屏幕阅读器中导航

大多数屏幕阅读器支持两种导航方法:

  • 线性导航。 当用户以线性方式在UI上移动时,通过向左或向右滑动或使用方向控件 (这是我们不久后将要研究的另一种可访问性服务)来提供音频提示。
  • 轻触探索。 当用户触摸屏幕阅读器时,会宣布每个UI元素。

使用线性导航和“触摸浏览”方法测试您的应用程序很重要。

请注意,有些人可能会同时使用“话语提示”和“ 盲文提示”应用程序和外部可刷新的盲文提示 。 如果不购买盲文显示器,便无法完全测试盲文支持,但是如果您有兴趣了解有关这些设备的更多信息,那么YouTube上有很多盲文显示器视频 。

您还可以使用“盲文提示”应用程序预览您的应用程序文本在盲文显示器上的呈现方式。 安装盲文提示后,导航至设置>辅助功能>盲文提示>设置>开发人员选项>在屏幕上显示盲文输出 导航回到BrailleBack主屏幕,将滑块推至On位置,然后BrailleBack将添加一个覆盖层,该覆盖层将显示您当前正在查看的任何屏幕的盲文单元。

现在,您已经设置了屏幕阅读器(以及可选的BrailleBack),让我们看一下如何针对此辅助功能优化应用程序。

添加内容描述

文本标签使屏幕混乱,因此,应尽可能避免在用户界面中添加显式标签。

使用垃圾桶图标而不是“ 删除”标签来传达按钮的目的可能是不错的设计,但这确实对屏幕阅读器造成了问题,因为该屏幕阅读器没有任何内容可供阅读!

您应该为任何不包含可见文本的控件(例如ImageButtonsCheckBoxes )以及可视媒体(例如图像)提供内容描述

这些内容标签不会显示在屏幕上,但是只要相应的UI元素成为焦点,辅助功能服务(例如屏幕阅读器和盲文显示器)就会宣布该标签。

您可以使用android:contentDescription将内容描述添加到静态元素:

ActivityFragment的生命周期中发生变化,则应改用setContentDescription()

private void updateButton() {    if (mediaCurrentlyPlaying) {       playPauseImageView.setContentDescription(getString(R.string.pause));    } else {       playPauseImageView.setContentDescription(getString(R.string.play));    }}

精心设计完美的内容描述是一项棘手的平衡工作,因为提供过多的信息通常和提供过多的信息一样糟糕。 如果您的内容描述不必要地详细,或者将内容描述添加到用户不需要了解的元素,那么为了了解当前屏幕,导航时会有很多白噪声。

您的内容描述需要是有益的描述,独立意义,并提供刚够上下文中的用户才能够成功地驾驭你的应用程序进行。

为避免不必要的信息使用户不知所措:

  • 不要在内容描述中包含控件的类型。 可访问性服务通常会在控件的标签后宣布控件的类型,因此您的“提交按钮”描述可能会变成“提交按钮按钮”。
  • 不要浪费描述组件物理外观的文字。 用户需要知道与控件交互时会发生什么,而不必知道该控件的外观
  • 不要包含有关如何与控件进行交互的说明。 除了触摸屏以外,还有许多其他与设备进行交互的方式,因此,告诉用户“点击此链接以编辑设置”不仅是在内容描述中添加了不必要的文字,还可能误导用户。
  • 不要在所有内容上添加内容描述。 屏幕阅读器通常可以安全地忽略只是为了使屏幕看起来更好而存在的UI元素,因此您通常不需要为应用程序的装饰元素提供内容描述。 您还可以通过将View标记为android:contentDescription=“@null”android:isImportantForAccessibility=“no” (Android 4.1及更高版本)来明确指示View不响应可访问性服务。

用户必须能够仅从其内容描述中识别项目,因此每个内容描述必须唯一。 特别是,不要忘记为重复使用的布局(例如ListViewRecyclerView更新描述。

对内容描述感到满意后,应通过仅使用语音反馈尝试浏览您的应用,然后进行必要的调整来对它们进行测试。

不要淹没屏幕阅读器

某些屏幕阅读器可让您独立于设备上的其他声音来调整应用程序音频的音量,有些屏幕阅读器甚至支持“音频回避”,当屏幕阅读器讲话时,该功能会自动降低设备的其他音频。 但是,您不应假定用户选择的屏幕阅读器支持这两种功能之一,或者它们已被启用。

如果您的应用程序具有音乐或声音效果,可能会淹没屏幕阅读器,那么您应该为用户提供一种禁用这些声音的方法。 另外,只要您的应用检测到启用了屏幕阅读器,它就会自动禁用所有不必要的音频。

不要依赖视觉提示

将链接的格式设置为带蓝色下划线的文本可能是一种常见的做法,但是在一系列屏幕阅读器提示下遇到用户界面的用户可能并不了解这些视觉提示。

为确保所有用户都知道您应用程序的超链接,请执行以下任一操作:

  • 定位您的锚文本,以便清楚地看到这段文本包含超链接。
  • 添加内容描述。
  • 将超链接提取到新的上下文中。 例如,如果将链接移动到按钮或菜单项中,则用户将已经知道他们应该与此控件进行交互。

考虑更换定时控件

一段时间后,某些控件可能会自动消失。 例如,一旦您观看了几秒钟的视频,视频播放控件就会逐渐消失。

由于屏幕阅读器仅在控件获得焦点时才会宣布控件,因此定时控件可能会在用户有机会专注于控件之前消失。 如果您的应用程序包含任何定时控件,那么当您的应用程序检测到启用了屏幕阅读器时,或者应该至少延长该控件在屏幕上显示的时间,您应该考虑将它们设为永久控件。

不要依靠颜色

除非您将它们包含在内容描述中,否则屏幕阅读器将不会向用户传达颜色提示,因此您绝不应将颜色用作传达重要信息的唯一方法。 此规则还有助于确保色盲用户或在区分某些颜色时遇到问题的人可以访问您的应用。

如果使用颜色突出显示重要文本,则需要使用其他方法来强调文本,例如,在使文本成为焦点时提供内容描述,声音效果或触觉(基于触摸)反馈。 您还应该为有色盲的人提供其他视觉提示,例如改变字体大小或使用斜体或下划线效果。

开关访问和方向控制

视力有限或有手动灵活性问题的用户可以使用方向控制或“开关访问”而不是触摸屏来操作其设备。

1.测试应用程序的交换机访问权限

开关访问允许您使用“开关”与Android设备进行交互,该开关向设备发送击键信号,类似于按“ 确定”或“ 选择”按钮。

在本节中,我们将创建单独的“下一个”,“上一个”和“选择”开关,但是也可以创建“选择”开关,并使“开关访问”以连续循环的方式在屏幕的交互元素中循环。 如果您希望使用此自动扫描方法测试您的应用,请导航至设置>辅助功能>切换访问>设置>自动扫描

Android支持以下开关:

  • 设备的硬件按钮,例如HomeVolume Up / Volume Down 通常,这是测试应用程序的开关支持的方式,因为它不需要您购买专用的开关设备。
  • 外部设备,例如通过USB或蓝牙连接到Android设备的键盘。
  • 身体动作。 您可以使用设备的前置摄像头将“开关”功能分配给实际动作,例如眨眼或张开嘴巴。

要启用交换机访问:

  • 导航至设置>辅助功能>切换访问权限
  • 选择在右上角的设置
  • 依次选择“ 下一个” ,“ 上一个”和“ 选择”项,按要分配给该操作的硬件键,然后点击“ 保存”
  • 浏览回到“ 开关访问 ”主屏幕,然后将滑块推到“ 打开”位置。

通过导航到“设置”>“辅助功能”>“开关访问” ,并将滑块推到“ 关闭”位置,可以随时禁用“开关访问

2.测试应用程序的方向控制支持

方向控制使用户可以使用上/下/左/右动作以线性方式线性导航其设备,就像使用电视遥控器导航电视指南一样。

Android支持以下方向控件:

  • 设备的硬件密钥。
  • 通过USB或蓝牙连接的外部设备,例如触控板,键盘或方向盘(D-pad)
  • 模拟方向控制的软件,例如“ 话语提示”手势

方向控制和开关访问设计

当用户使用Switch Access或方向控件与您的应用进行交互时,您需要确保:

  1. 他们可以联系您的应用程序的所有交互式组件并与之交互。
  2. 焦点以逻辑方式从一个UI控件移至下一个。 例如,如果用户在其方向控件上按下“ 向右”按钮,则焦点应移至他们期望的UI元素。

如果您使用的是Android的标准Views ,则默认情况下您的控件应该是可聚焦的,但是您应该始终对此进行测试。

要检查所有交互式组件是否可以通过“开关访问”进行聚焦,请使用开关从屏幕顶部导航到底部,以确保每个控件都在某个时候获得焦点。

测试应用程序的方向控制支持的最简单方法是在Android虚拟设备(AVD)上模拟方向盘。

缺点是,这需要编辑AVD的config.ini设置。 请注意,以下说明是针对macOS编写的,因此,如果您在Windows或Linux上进行开发,则步骤可能会略有不同。

  • 打开“查找器”窗口,然后从工具栏中选择“ 转到”>“转到文件夹... ”。
  • 在随后的弹出窗口中,输入〜/ .android / avd ,然后单击Go
  • 打开与您要使用的AVD相对应的文件夹。
  • 按住Control键并单击config.ini文件,然后选择Open with> Other...。
  • 选择一个文本编辑程序; 我选择了TextEdit。
  • 在随后的文本文件中,找到hw.dPad=no行并将其更改为hw.dPad=yes 保存此文件。
  • 在刚编辑的AVD上启动应用程序。
  • 选择“ 更多”按钮(在下面的屏幕快照中光标所在的位置)。
创建可访问的Android应用程序:辅助技术_第1张图片
  • 从左侧菜单中选择方向盘”。
  • 现在,您可以使用模拟方向盘浏览应用程序。
创建可访问的Android应用程序:辅助技术_第2张图片

Android的标准UI控件默认情况下是可聚焦的,但是如果您要专注于特定控件,则可能需要使用android:focusable="true" View.setFocusable() android:focusable="true"View.setFocusable()将其明确标记为可聚焦。

您还应该通过在所有方向上遍历应用程序的所有控件来检查焦点顺序是否以逻辑方式从一个UI元素移至下一个。 (不要忘记测试反向!)

Android会根据算法自动确定每个屏幕的焦点顺序,但有时您可以通过手动更改焦点顺序来改善此顺序。

您可以使用以下XML属性来指定当用户朝某个方向移动时应该获得焦点的View: android:nextFocusUpandroid:nextFocusDownandroid:nextFocusRightandroid:nextFocusLeft

例如,假设您具有以下布局:

<?xml version="1.0" encoding="utf-8"?>https://schemas.android.com/apk/res/android"   xmlns:app="http://schemas.android.com/apk/res-auto"   xmlns:tools="http://schemas.android.com/tools"   android:layout_width="match_parent"   android:layout_height="match_parent"   tools:context="com.jessicathornsby.accessibility.MainActivity">      
创建可访问的Android应用程序:辅助技术_第3张图片

默认情况下,当Button控件处于焦点时:

  • 按下将使CheckBox成为关注的焦点。
  • Right将使EditText成为焦点。

您可以使用android:next属性切换此顺序。 在下面的代码中:

  • 按下带来EditText成为关注的焦点。
  • 向右可使CheckBox成为焦点。

或者,您可以在运行时使用setNextFocusDownIdsetNextFocusForwardIdsetNextFocusLeftIdsetNextFocusRightIdsetNextFocusUpId来修改焦点顺序。

简化布局

布局更简单, 每个人都可以轻松浏览,但是对于使用Switch Access或方向控件与您的应用进行交互的任何人来说,尤其如此。

在测试应用程序的导航时,寻找任何机会从UI中删除元素。 特别是,您应该考虑从布局中删除任何嵌套,因为嵌套布局会使您的应用程序导航起来更加困难。

不要忽略应用程序的触摸屏支持

某些具有手动灵活性问题的用户可能更喜欢使用触摸屏与他们的设备进行交互。

为了帮助支持这些用户,您应用的所有互动元素都应为48 x 48 dp或更大,所有可触摸元素之间至少应为8 dp。 您可能还想尝试使用Android的TouchDelegate API来增加触摸目标的尺寸,而无需实际增加其相关View的尺寸。

隐藏式字幕

您应该为应用程序的所有语音提供字幕。

要在设备上启用隐藏式字幕,请执行以下操作:

  • 导航至“设置”>“辅助功能”>“字幕”
  • 将滑块推到“ 打开”位置。

在Android 4.4及更高版本上,您可以使用addSubtitleSource()添加WebVTT格式的外部字幕源文件,例如:

myVideoView.addSubtitleSource(  getResources().openRawResource(R.raw.subs_english_vtt),  MediaFormat.createSubtitleFormar(“text/vtt”,    Locale.ENGLISH.getLanguage()));

字幕是系统范围的设置,因此依赖字幕的人很可能在启用了字幕的情况下启动您的应用程序。 但是,如果用户启用字幕,那么至关重要的是,您必须清楚自己的应用程序支持隐藏式字幕并提供启用字幕的方法。 通常,您可以通过在用户界面中突出显示“ 字幕”按钮来实现这两项功能,例如,在应用程序的视频播放控件中添加“ 字幕”按钮。

由于字幕是系统范围的设置,因此您的应用仅需要将用户转发到其设备的“设置”应用的相应部分( “设置”>“辅助功能”>“字幕” )。 例如:

public boolean onOptionsItemSelected(   MenuItem item){ if(item.getItemId() == R.id.menu_captions){   startActivityForIntent(new Intent(     Settings.ACTION_CAPTIONING_SETTINGS));   }}

Android会根据用户的系统范围的字幕设置(位于“设置”>“辅助功能”>“字幕”中)更改字幕的格式。 为确保字幕清晰可见,无论用户如何设置,您都需要在Android的所有格式设置选项中测试字幕。

字体大小

努力阅读屏幕上的文本的用户可以增加设备上使用的字体大小。

您必须确保您的应用仍然可以在多种文字大小下正常工作。 要对此进行测试,请尝试在设备范围内更改文本大小。

  • 启动设备的“设置”应用。
  • 导航到“设置”>“辅助功能”>“字体大小”
  • 向大A推滑块以增加字体大小,向小A推滑块以减小字体大小。

假设您以可缩放像素( sp )定义了文本,则您的应用应根据用户的字体大小首选项自动更新。

如果您设计了灵活的布局,那么理想情况下,您的应用应该能够容纳一定范围的文本大小,但是您应该始终测试应用如何处理所有字体大小设置,并进行必要的调整。 如果某些设置使您的应用无法使用,则根据用户的偏好增加或减少的文本将不会改善用户体验!

结论

在本文中,您学习了如何针对某些Android最常用的辅助技术和辅助功能来优化您的应用程序。

如果您想了解有关可访问性的更多信息,那么Google已发布了一个示例应用程序 ,其中包含本文讨论的许多技术的代码。 在Web Accessibility Initiative网站上 ,您还将找到有关移动可访问性的大量信息。

翻译自: https://code.tutsplus.com/tutorials/creating-accessible-android-apps-supporting-screen-readers--cms-30090

更多相关文章

  1. Android 滑动切换页面 以及屏幕手势
  2. Android界面设计基础:控件焦点4个步骤
  3. android 开发零起步学习笔记(九):android 控制控件的位置和大小及L
  4. 一起写一个Android图片轮播控件
  5. 让你自己编写的Android的Launcher成为系统中第一个启动应用程序,
  6. 屏幕适配技术查阅资料汇总

随机推荐

  1. Android中获取网页表单中的数据
  2. FFmpeg4Android:Android摄像头直播
  3. AndroidManifest文件中android属性
  4. android:exported 属性详解
  5. Gradle DSL method not found: 'android(
  6. Android(安卓)Study ING
  7. android开启闪光灯
  8. Android中获取IMEI码
  9. Android(安卓)-- 重写android返回键
  10. android 返回到首页