Android のアクセシビリティ
このページでは、Android のアクセシビリティ API を使用して、アクセシビリティ チェックリストに従ってアプリをビルドする方法について説明します。 その他のプラットフォーム API については、iOS アクセシビリティ ページと OS X アクセシビリティ ページを参照してください。
UI 要素を記述する
Android には、画面読み取り API によって使用される ContentDescription
プロパティが用意されており、コントロールの目的についてアクセシビリティ対応の説明が提供されます。
コンテンツの説明は、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 でヒントを使用する
データ入力の EditText
コントロールと TextView
コントロールの場合は、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 で入力フィールドをラベルとリンクする
ラベルをデータ入力コントロールに関連付けるには、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" />
また、nextFocusDown
、nextFocusLeft
、nextFocusRight
、nextFocusUp
属性 (通常はレイアウト AXML で設定) を使用してフォーカスの順序を制御することもできます。 これらの属性を使用して、ユーザーが画面上のコントロール間を簡単に移動できるようにします。
アクセシビリティとローカライズ
上記の例では、ヒントとコンテンツの説明が表示値に直接設定されています。 次のように、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
hint
や contentDescription
などのレイアウト XML アクセシビリティ属性は、文字列識別子に設定できます。
<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 デバイスでアクセシビリティをテストします。
設定 > アクセシビリティに表示されない場合は、Google Play から TalkBack をインストールする必要がある場合があります。