次の方法で共有


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 プロパティを使用して

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" />

また、nextFocusDownnextFocusLeftnextFocusRightnextFocusUp 属性 (通常はレイアウト 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

hintcontentDescription などのレイアウト 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 をインストールする必要がある場合があります。