Accessibilità in Android

Questa pagina descrive come usare le API di accessibilità Android per creare app in base all'elenco di controllo per l'accessibilità. Per altre API della piattaforma, vedere le pagine di accessibilità per iOS e OS X .

Descrizione degli elementi dell'interfaccia utente

Android fornisce una ContentDescription proprietà usata dalle API di lettura dello schermo per fornire una descrizione accessibile dello scopo del controllo.

La descrizione del contenuto può essere impostata in C# o nel file di layout AXML.

C#

La descrizione può essere impostata nel codice su qualsiasi stringa (o una risorsa stringa):

saveButton.ContentDescription = "Save data";

Layout AXML

Nei layout XML usare l'attributo android:contentDescription :

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

Usare hint per TextView

Per EditText i controlli e TextView per l'input dei dati, usare la Hint proprietà per fornire una descrizione dell'input previsto (anziché ).ContentDescription Quando è stato immesso un testo, il testo stesso verrà "letto" anziché l'hint.

C#

Impostare la Hint proprietà nel codice:

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

Layout AXML

Nei file di layout XML usare l'attributo android:hint :

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

Per associare un'etichetta a un controllo di input dati, utilizzare la LabelFor proprietà per

C#

In C# impostare la LabelFor proprietà sull'ID risorsa del controllo descritto da questo contenuto (in genere questa proprietà viene impostata su un'etichetta e fa riferimento ad altri controlli di input):

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

Layout AXML

Nel codice XML di layout utilizzare la android:labelFor proprietà per fare riferimento all'identificatore di un altro controllo:

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

Annunciare l'accessibilità

Usare il AnnounceForAccessibility metodo in qualsiasi controllo di visualizzazione per comunicare un evento o una modifica dello stato agli utenti quando l'accessibilità è abilitata. Questo metodo non è necessario per la maggior parte delle operazioni in cui la narrazione predefinita fornisce un feedback sufficiente, ma deve essere usata dove potrebbero essere utili informazioni aggiuntive per l'utente.

Il codice seguente illustra un semplice esempio che chiama AnnounceForAccessibility:

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

Modifica della Impostazioni messa a fuoco

La navigazione accessibile si basa sui controlli che hanno lo stato attivo per aiutare l'utente a comprendere quali operazioni sono disponibili. Android fornisce una Focusable proprietà che può contrassegnare i controlli in modo specifico in grado di ricevere lo stato attivo durante la navigazione.

C#

Per impedire a un controllo di ottenere lo stato attivo con C#, impostare la Focusable proprietà su false:

label.Focusable = false;

Layout AXML

Nei file XML di layout impostare l'attributo android:focusable :

<android:focusable="false" />

È anche possibile controllare l'ordine dello stato attivo con gli nextFocusDownattributi , nextFocusLeftnextFocusRight, , nextFocusUp , in genere impostati nel layout AXML. Usare questi attributi per garantire che l'utente possa spostarsi facilmente tra i controlli sullo schermo.

Accessibilità e localizzazione

Negli esempi precedenti l'hint e la descrizione del contenuto vengono impostati direttamente sul valore di visualizzazione. È preferibile usare valori in un file Strings.xml , ad esempio:

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

L'uso di testo da un file di stringhe è illustrato di seguito nei file di layout C# e AXML:

C#

Anziché usare valori letterali stringa nel codice, cercare i valori tradotti dai file di stringhe con Resources.GetText:

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

AXML

Negli attributi di accessibilità XML di layout come hint e contentDescription possono essere impostati su un identificatore di stringa:

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

Il vantaggio dell'archiviazione di testo in un file separato è la possibilità di fornire più traduzioni in lingua del file nell'app. Vedere la guida alla localizzazione di Android per informazioni su come aggiungere file di stringa localizzati a un progetto di applicazione.

Test dell'accessibilità

Seguire questa procedura per abilitare TalkBack ed Esplora by Touch per testare l'accessibilità nei dispositivi Android.

Potrebbe essere necessario installare TalkBack da Google Play se non viene visualizzato in Impostazioni > Accessibilità.