Android 上的辅助功能

本页介绍如何使用 Android 辅助功能 API 根据辅助功能检查清单生成应用。 有关其他平台 API,请参阅 iOS 辅助功能OS X 辅助功能页面。

描述 UI 元素

Android 提供了一个 ContentDescription 属性,该属性由屏幕阅读 API 用于提供控件用途的可访问说明。

可在 C# 或 AXML 布局文件中设置内容说明。

C#

可在代码中将说明设置为任何字符串(或字符串资源):

saveButton.ContentDescription = "Save data";

AXML 布局

在 XML 布局中,使用 android:contentDescription 特性:

<ImageButton
    android:id=@+id/saveButton"
    android:src="@drawable/save_image"
    android:contentDescription="Save data" />

对 TextView 使用提示

对于数据输入的 EditTextTextView 控件,使用 Hint 属性以提供预期输入的说明(而不是 ContentDescription)。 输入某些文本时,文本本身(而不是提示)将被“阅读”。

C#

在代码中设置 Hint 属性:

someText.Hint = "Enter some text"; // displays (and is "read") when control is empty

AXML 布局

在 XML 布局文件中,使用 android:hint 特性:

<EditText
    android:id="@+id/someText"
    android:hint="Enter some text" />

若要将标签与数据输入控件相关联,请使用 LabelFor 属性

C#

在 C# 中,将 LabelFor 属性设置为此内容描述的控件的资源 ID(通常此属性在标签上设置并引用某个其他输入控件):

EditText edit = FindViewById<EditText> (Resource.Id.editFirstName);
TextView tv = FindViewById<TextView> (Resource.Id.labelFirstName);
tv.LabelFor = Resource.Id.editFirstName;

AXML 布局

在布局 XML 中,使用 android:labelFor 属性引用另一个控件的标识符:

<TextView
    android:id="@+id/labelFirstName"
    android:hint="Enter some text"
    android:labelFor="@+id/editFirstName" />
<EditText
    android:id="@+id/editFirstName"
    android:hint="Enter some text" />

报出以实现辅助功能

在任何视图控件上使用 AnnounceForAccessibility 方法,以在启用了辅助功能时向用户传达事件或状态更改。 对于内置旁白提供足够反馈的大多数操作,此方法不是必需的,但应在附加信息对用户有帮助的情况下使用。

下面的代码显示了调用 AnnounceForAccessibility 的简单示例:

button.Click += delegate {
  button.Text = string.Format ("{0} clicks!", count++);
  button.AnnounceForAccessibility (button.Text);
};

更改焦点设置

可访问的导航依赖于具有焦点的控件以帮助用户了解哪些操作可用。 Android 提供一个 Focusable 属性,该属性可将控件标记为在导航期间特别能够接收焦点。

C#

若要使用 C# 防止控件获得焦点,请将 Focusable 属性设置为 false

label.Focusable = false;

AXML 布局

在布局 XML 文件中,设置 android:focusable 特性:

<android:focusable="false" />

还可使用通常在布局 AXML 中设置的 nextFocusDownnextFocusLeftnextFocusRightnextFocusUp 特性来控制焦点顺序。 使用这些特性以确保用户可轻松地浏览屏幕上的控件。

辅助功能和本地化

在上面的示例中,提示和内容说明直接设置为显示值。 最好在 Strings.xml 文件中使用值,如下所示

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="enter_info">Enter some text</string>
    <string name="save_info">Save data</string>
</resources>

在 C# 和 AXML 布局文件中,使用字符串文件中的文本如下所示:

C#

使用 Resources.GetText 查找字符串文件中已转换的值,而不是在代码中使用字符串字面量:

someText.Hint = Resources.GetText (Resource.String.enter_info);
saveButton.ContentDescription = Resources.GetText (Resource.String.save_info);

AXML

在布局 XML中,辅助功能特性(如 hintcontentDescription)可设置为字符串标识符:

<TextView
    android:id="@+id/someText"
    android:hint="@string/enter_info" />
<ImageButton
    android:id=@+id/saveButton"
    android:src="@drawable/save_image"
    android:contentDescription="@string/save_info" />

将文本存储在单独的文件中的好处是可在应用中提供文件的多种语言翻译。 请参阅 Android 本地化指南,了解如何将已本地化的字符串文件添加到应用程序项目。

测试辅助功能

按照这些步骤启用 TalkBack 和 Explore by Touch 以测试 Android 设备上的辅助功能。

如果 TalkBack 未显示在“设置”>“辅助功能”中,可能需要从 Google Play 安装它