Android

Java安卓学习总结(二十三)

第十九章 Android辅助功能

辅助功能是辅助一些行为能力上有障碍的人群使用Android应用的功能,这一章主要介绍的是TalkBack,其目的是帮助视力不好的人来使用安卓应用。

由于模拟器上不能使用TalkBack,再加上对于已经习惯正常使用安卓的我来说,用TalkBack操作安卓系统就很不习惯,所以这一章显得十分繁琐。

有关TalkBack

非原生安卓系统可能没有TalkBack,需要下载安装Android Accessibility Suite。另外TTS可能也没有可用的引擎,这里推荐一个下载地址

简单来讲就是将把这台智能手机转化成非智能手机的操作模式:有一个绿框表示当前聚焦的位置,只能通过双击屏幕后才能打开这个位置;并且你每当你聚焦到另一个地方,系统就会自动帮你读出这一块的内容。十分坦诚地讲,也不怪常有人不愿意做这一块,因为调试起来实在是很难受,我第一次用时不明白怎么切换页面,差点都迷失了自我。

具体的一些操作是,点击屏幕的某一位置,就会自动聚焦到该位置,并且会自动帮你读出这个位置的组件的内容。向右滑屏是到下一个元素(方向与正常的相反),反之就是上一个。

有关非文字型元素可读

例如ImageView、ImageButton这些组件,其没有设置text属性,这样TalkBack不会提示任何有关这个组件作用的信息,解决方法是添加contentDescription属性:

<ImageButton
    android:id="@+id/crime_carema"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@android:drawable/ic_menu_camera"
android:contentDescription="@string/crime_photo_button_descrition"/>

此外一些例如ImageVIew这类的组件没有做可聚焦登记,这样的话默认是聚焦不到其上面的,直接体现就是点击这一块区域时绿框会出现在其上层的布局上。

focusable登记之为可聚焦组件代码:

<ImageView
    android:id="@+id/crime_photo"
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:scaleType="centerInside"
    android:cropToPadding="true"
    android:background="@android:color/darker_gray"
android:contentDescription="@string/crime_photo_no_image_descrition"
    android:focusable="true"/>

有关提升辅助体验的其它内容

动态设置描述

某些组件可能提供不了任何有意义的说明,这时候可以将其内容描述设置为null,让Talkback直接忽略它。而有一些组件可能在不同的情况下表达的信息不同,这时候就需要动态设置描述:

private void updatePhotoView()
{
if (mPhotoFile==null||!mPhotoFile.exists())
{
mPhotoView.setImageDrawable(null);
mPhotoView.setContentDescription(getString(R.string.crime_photo_no_image_descrition));
}
else
{
Bitmap bitmap=PictureUtils.getScaledBitmap(mPhotoFile.getPath(),getActivity());
mPhotoView.setImageBitmap(bitmap);
mPhotoView.setContentDescription(getString(R.string.crime_photo_image_descrition));

}
}

使用label提供上下文

经常会出现这种情况,当用EditText来输入时需要用有关TextView来表明EditView接受的时什么信息的输入,而当EditText中有了其它文字之后Talkback就会读出那些文字内容。EditText接受的内容往往不能明确表名EditText的作用,这时候可以将EditText打上标签,和与其对应的那个TextView绑定,这样Talkback就会在描述EditText时先读出TextView的内容。

<TextView

android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/crime_title_label"
style="?android:listSeparatorTextViewStyle"
android:labelFor="@+id/crime_title"/>
<EditText
android:id="@+id/crime_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/crime_title_hint"/>

有关辅助功能扫描器

就是一个检测一个应用的辅助功能如何,并对不足之处给出建议。

wechat image editing  twenty trillion and two hundred

可以看见即便是例如QQ这样的成熟的应用都不能做到完美的辅助功能设计(聊天框页面建议更多),因此这一章的挑战练习暂时就先跳过,暂时放在优先级较低的位置。

发表评论