Accesibilidad en Android
En esta página se describe cómo usar las API de accesibilidad de Android para compilar aplicaciones según la lista de comprobación de accesibilidad. Consulte las páginas Accesibilidad de iOS y Accesibilidad de OS X de otras API de plataforma.
Descripción de elementos de la interfaz de usuario
Android proporciona una propiedad ContentDescription
que las API de lectura de pantalla utilizan para proporcionar una descripción accesible del propósito del control.
La descripción del contenido se puede establecer en C# o en el archivo de diseño de AXML.
C#
La descripción se puede establecer en el código en cualquier cadena (o en un recurso de cadena):
saveButton.ContentDescription = "Save data";
Diseño de AXML
En los diseños XML, use el atributo android:contentDescription
:
<ImageButton
android:id=@+id/saveButton"
android:src="@drawable/save_image"
android:contentDescription="Save data" />
Uso de sugerencias para TextView
En el caso de los controles EditText
y TextView
para la entrada de datos, use la propiedad Hint
para proporcionar una descripción de la entrada prevista (en lugar de ContentDescription
).
Cuando se haya escrito algo de texto, el propio texto se "leerá" en lugar de la sugerencia.
C#
Establezca la propiedad Hint
en el código:
someText.Hint = "Enter some text"; // displays (and is "read") when control is empty
Diseño de AXML
En los archivos de diseño XML, use el atributo android:hint
:
<EditText
android:id="@+id/someText"
android:hint="Enter some text" />
LabelFor vincula campos de entrada con etiquetas
Para asociar una etiqueta a un control de entrada de datos, use la propiedad LabelFor
para
C#
En C#, establezca la propiedad LabelFor
en el identificador de recurso del control que describe este contenido (normalmente esta propiedad se establece en una etiqueta y hace referencia a algún otro control de entrada):
EditText edit = FindViewById<EditText> (Resource.Id.editFirstName);
TextView tv = FindViewById<TextView> (Resource.Id.labelFirstName);
tv.LabelFor = Resource.Id.editFirstName;
Diseño de AXML
En el XML de diseño, use la propiedad android:labelFor
para hacer referencia al identificador de otro control:
<TextView
android:id="@+id/labelFirstName"
android:hint="Enter some text"
android:labelFor="@+id/editFirstName" />
<EditText
android:id="@+id/editFirstName"
android:hint="Enter some text" />
Anuncio de accesibilidad
Use el método AnnounceForAccessibility
en cualquier control de vista para comunicar un cambio de estado o evento a los usuarios cuando se habilite la accesibilidad. Este método no es necesario para la mayoría de las operaciones en las que la narración integrada proporciona comentarios suficientes, pero debe usarse en aquellos casos en los que la información adicional sería útil para el usuario.
En el código siguiente se muestra un ejemplo sencillo que llama a AnnounceForAccessibility
:
button.Click += delegate {
button.Text = string.Format ("{0} clicks!", count++);
button.AnnounceForAccessibility (button.Text);
};
Configuración del cambio de enfoque
La navegación accesible se basa en controles cuyo enfoque principal es ayudar al usuario a comprender qué operaciones están disponibles. Android proporciona una propiedad Focusable
que puede etiquetar los controles como específicamente capaces de recibir el enfoque durante la navegación.
C#
Para evitar que un control obtenga el enfoque con C#, establezca la propiedad Focusable
en false
:
label.Focusable = false;
Diseño de AXML
En los archivos XML de diseño, establezca el atributo android:focusable
:
<android:focusable="false" />
También puede controlar el orden del enfoque con los atributos nextFocusDown
, nextFocusLeft
, nextFocusRight
y nextFocusUp
que, normalmente, se establecen en el diseño de AXML. Use estos atributos para asegurarse de que el usuario pueda navegar fácilmente a través de los controles de la pantalla.
Accesibilidad y localización
En los ejemplos anteriores, la sugerencia y la descripción del contenido se establecen directamente en el valor para mostrar. Es preferible usar valores en un archivo Strings.xml como este:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="enter_info">Enter some text</string>
<string name="save_info">Save data</string>
</resources>
El uso de texto de un archivo de cadenas se muestra a continuación en los archivos de diseño de C# y AXML:
C#
En lugar de usar literales de cadena en el código, busque valores traducidos en los archivos de cadenas con Resources.GetText
:
someText.Hint = Resources.GetText (Resource.String.enter_info);
saveButton.ContentDescription = Resources.GetText (Resource.String.save_info);
AXML
En los atributos de accesibilidad XML de diseño como hint
y contentDescription
se pueden establecer en un identificador de cadena:
<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" />
La ventaja de almacenar texto en un archivo independiente es que se pueden proporcionar varias traducciones del idioma del archivo en la aplicación. Consulte la guía de localización de Android para aprender a agregar archivos de cadena localizados a un proyecto de aplicación.
Probar la accesibilidad
Siga estos pasos para habilitar TalkBack y Explore by Touch para probar la accesibilidad en dispositivos Android.
Es posible que tenga que instalar TalkBack desde Google Play si no aparece en Configuración > Accesibilidad.