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" />
LabelFor collega i campi di input con le etichette
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 nextFocusDown
attributi , nextFocusLeft
nextFocusRight
, , 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à.