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

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.