《Android编程权威指南》第18 章,本章会接触到 TalkBack 辅助工具,让视力障碍用户也能方便地使用 CriminalIntent 应用。
一、TalkBack
Google 开发的 Android 屏幕阅读器,它实际是一个辅助服务,用户可以操作它,读出屏幕上的内容。
先下载 Android AccessibilitySuite ,由于我的手机没有安装 google play,emmm~ 然后从网页上直接下载了 apk 文件安装到手机上。
然后进入设置 -> 辅助功能 -> 无障碍 -> 其他「已安装的服务」-> 开启 Talkback。
然后就可以听到手机喋喋不休的声音了,提示点到了哪里这类,然后有视觉障碍用户就可以根据提示玩转手机了。双指按住屏幕三秒以上即可关闭这个功能。
只要启用了TalkBack,点击浏览(Explore by Touch)功能也会开启。点击某UI元素,设备就会读出相关信息。可以自行尝试一下的啦。
在物理设备上,需要两根手指按住屏幕上下滚动才能滚动列表。
TalkBack 有线性浏览功能。向右滑屏,辅助焦点移动到下一个UI元素;向左滑屏,移动到上一个UI元素。这样就可以不用盲目的划屏了。
二、实现非文字型元素可读
添加内容描述
像应用中拍照按钮没有文字描述,TalkBack 只能默认告诉用户连击两次激活,这就很鸡肋了,用户并不知道在干嘛,我们可以给像 ImageButton 这类控件添加内容描述,TalkBack 就有内容可读了。
内容描述是一段针对控件的文字说明,供 TalkBack 朗读。
Android 提供了给控件添加描述的属性,可在 xml 中给看控件添加 android:contentDescription 或者是在代码里给控件设置 someView.setContentDescription("xxx"),然后 TalkBack 会朗读给用户听了。
打开 string.xml ,添加描述内容,中文英文都要添加噢:
陋习现场拍照按钮
陋习现场照片(未拍照)
陋习现场照片(已拍照)
Take photo of crime scene
Crime scene photo
crime scene photo
然后再去给控件添加属性描述啦。
实现部件可聚焦
像 ImageView 控件默认是没有聚焦的。有些控件,比如 Button,默认是可聚焦的,所以 ImageView 这样的控件需要手动聚焦。设置 android:focusable 属性值为 true 或使用监听器都可以让这些控件可聚焦。
这样一来,TalkBack 就可以在点到 ImageView 的时候给用户读取描述了。
三、提升辅助体验
一些控件,比如 ImageView,虽会给用户提供一些信息,但没有文字性内容。应给这些部件添加内容描述。如果某个控件提供不了任何有意义的说明,更应该把它的内容描述设置为 null,让 TalkBack 直接忽略它。这样能提升用户体验。
这里给 ImageView 添加个动态的提示,有照片提示有照片,无照片提示无照片需要拍照。更新下 updatePhotoView() 函数。
private fun updatePhotoView(width: Int, height: Int) {
if (photoFile.exists()) {
val bitmap = PictureUtil.getScaledBitmap(photoFile.path, width, height)
mBinding.imgCrimePhoto.setImageBitmap(bitmap)
mBinding.imgCrimePhoto.contentDescription = getString(R.string.crime_photo_image_description)
} else {
mBinding.imgCrimePhoto.setImageDrawable(null)
mBinding.imgCrimePhoto.contentDescription = getString(R.string.crime_photo_no_image)
}
}
支持辅助功能并不难,作为开发人员,开发 app 的时候应该更为友好的为一些障碍人员服务,让 app 更为友善。也算是一种贡献啦。
四、深入学习:使用辅助功能扫描器
Google提供了一个辅助功能扫描器。它能评估应用在辅助功能方面做得如何并给出改进意见。
下载 Accessibility Scanner ,可以选择网上下载 apk 文件,再安装到手机上,然后开启给它授权。
授权完毕后会看到手机最上层有个圈圈里面有个勾勾,然后打开 CriminalIntent app ,点下这个勾勾,会看到下图,点击允许。
然后就能看到 Accessibility Scanner 给 CriminalIntent 的建议了。
要关闭辅助功能扫描器的话,就去设置->辅助功能->无障碍->其他(已安装的服务->无障碍功能扫描仪,点击关闭即可。
五、挑战练习:优化列表项
给手铐图标添加内容描述,别忘记兼容语言。再为屏幕上的每条记录都动态添加一个待读数据的汇总内容描述。
六、挑战练习:补全上下文信息
这里主要学习 android:labelFor 属性,它指明 View 应该用作其他 View 的内容标签。把一个视图和别的视图关联起来,
比如,为时间按钮添加个 TextView 显示时间,将它两关联起来,TextView 应该显示点击了选择时间按钮后的内容。
参考:
https://support.google.com/accessibility/android/answer/7158690?hl=zh-Hans
这都是为障碍用户提供的无障碍功能,挺不错的。
七、挑战练习:事件主动通知
研究下 View.announceForAccessibility(...) 函数,让 TalkBack 用户在相机关闭时就能掌握照片更新情况。记得要测试一把。
八、其他
在安装了 TalkBack 的时候,我注意手机设置中的无障碍功能,里面其实自带了屏幕朗读功能,跟 TalkBack 类型,现在的手机供应商基本上在系统层面就已经内置了功能为一些特殊人群服务的。平时我都没注意到,真的挺赞的,功能很友好。让人感受到了一丝温暖。
CriminalIntent 项目 Demo 地址:
https://github.com/visiongem/AndroidGuideApp/tree/master/CriminalIntent