Los usuarios de los servicios de accesibilidad (como lectores de pantalla) dependen de las etiquetas de contenido para comprender el significado de los elementos de una interfaz.
En algunos casos, como cuando la información se comunica en forma gráfica en un elemento, las etiquetas de contenido pueden incluir una descripción de texto del significado o la acción asociados con el elemento.
Si los elementos de una interfaz de usuario no incluyen etiquetas de contenido, algunos usuarios pueden tener dificultades para comprender la información que reciben o para llevar a cabo acciones en la interfaz.
Implementación
VerCuando se usan ciertos tipos de Views
en una interfaz, deben incluir etiquetas de contenido que describan el propósito o la acción asociados con esa View
.
Cómo incluir etiquetas de contenido
android:contentDescription
Cuando usas una ImageView
, un ImageButton
, una CheckBox
o cualquier otra View
que comunique la información de forma gráfica, usa un atributo android:contentDescription
para ofrecer una etiqueta de contenido para esa View
.
En ocasiones, una etiqueta de contenido depende de información que solo está disponible durante el tiempo de ejecución. A su vez, el significado de una View
puede cambiar con el tiempo. Por ejemplo, un botón de reproducción puede transformarse en uno de pausa mientras se reproduce música. En estos casos, usa View#setContentDescription(CharSequence contentDescription)
para actualizar la etiqueta de contenido en el momento adecuado.
Por lo general, cuando un servicio de accesibilidad describe un ViewGroup
, combina etiquetas de contenido de sus Views
secundarias. Para anular este comportamiento y señalar que quieres incluir tu propia descripción para ese elemento y sus Views
secundarias no enfocables, configura una contentDescription
en el ViewGroup
. Es posible que debas incluir etiquetas de contenido de Views
secundarias en un contentDescription
cuando se establecen en un ViewGroup
.
android:hint
Para EditTexts
o TextViews
editables, usa un atributo android:hint
para indicar el propósito del campo de texto. No se debe usar una android:contentDescription
como una etiqueta de contenido para Views
editables.
android:labelFor
Usa un atributo android:labelFor
para indicar que una View
debe servir como una etiqueta de contenido de otra View
.
Casos en los que no se requieren etiquetas de contenido
En los siguientes casos, no es necesario incluir etiquetas de contenido específicamente:
- El texto que aparece en
TextView
(o sus subclases) se incluye automáticamente para los servicios de accesibilidad. Por lo general, no se necesitan etiquetas de contenido adicionales. - Las imágenes decorativas o que no transmiten información significativa de manera gráfica no requieren etiquetas de contenido. En estos casos, establece un atributo
android:contentDescription
de"@null"
o unoandroid:importantForAccessibility
de"no"
.
Para obtener más información, descubre cómo implementar etiquetas de contenido en la Capacitación para desarrolladores de Android y las Guías de las APIs.
Cuando se usan algunos tipos de funciones de componibilidad en una interfaz, deben incluir etiquetas de contenido que describan el propósito o la acción asociados a esa función.
Cómo incluir etiquetas de contenido
Descripciones de contenido
Para ofrecer una etiqueta de contenido para una función de componibilidad de Image
, Icon
o cualquier otra función de componibilidad de nivel inferior que comunique información de forma gráfica, establece la descripción del contenido.
- Una etiqueta de contenido puede depender de la información del entorno de ejecución y el significado de la función de componibilidad puede cambiar. Por ejemplo, un botón de reproducción puede transformarse en uno de pausa mientras se reproduce música.
- En estos casos, usa el estado para que Compose pueda observar los cambios en la descripción de contenido y volver a redactarla con el valor nuevo. Descubre cómo usar el estado y Jetpack Compose.
- En algunos casos, se recomienda que fusiones los elementos en uno solo que sea enfocable y en el que se combinen las etiquetas de contenido de sus elementos subordinados. Descubre cómo combinar elementos.
Parámetro de etiqueta
Algunas funciones de componibilidad, como TextField
, admiten un parámetro label
opcional. Cuando la etiqueta se establece, el elemento muestra la función de componibilidad que se pasó a label
. Los servicios de accesibilidad se pueden usar para describir la función de componibilidad.
Casos en los que no se requieren etiquetas de contenido
En algunos casos, como los siguientes, no es necesario agregar etiquetas de contenido:
- El texto que aparece en
Text
, o en otras funciones de componibilidadText
, se incluye automáticamente en los servicios de accesibilidad - Las imágenes decorativas o que no comunican información significativa de manera gráfica
- En estos casos, establece el parámetro
contentDescription
o la propiedadModifier.semantics#contentDescription
ennull
, o llama aModifier#clearAndSetSemantics
.
- En estos casos, establece el parámetro
Diseño
Cuando diseñes una interfaz de usuario, ten en cuenta cómo se debe etiquetar el contenido representado de manera gráfica para los usuarios de servicios de accesibilidad. Las etiquetas de contenido deben seguir estos principios:
- Ser breves y describir con claridad el significado o la acción asociados con un elemento
- No incluir el tipo o estado de un elemento en su etiqueta de contenido
- Si el elemento está asociado con una acción, describir la acción, pero no la representación gráfica
- No indicarle al usuario cómo interactuar específicamente con el elemento
Para obtener más información, lee los Lineamientos de redacción de accesibilidad de Material Design.
Prueba
Para verificar manualmente que no falten etiquetas de contenido en la interfaz de usuario de una app, haz lo siguiente:
- Activa TalkBack.
- Abre la app.
- Usa los gestos de navegación lineal para mover el foco de accesibilidad a cada elemento de la pantalla.
- Si TalkBack mueve el enfoque a algún elemento, pero no enuncia una representación significativa de ese elemento o enuncia un mensaje “no etiquetado”, es posible que falte una etiqueta de contenido en ese elemento.
Las herramientas de pruebas automatizadas de Android pueden detectar las etiquetas de contenido que faltan. Te recomendamos usar la Prueba de accesibilidad para Android si quieres realizar una prueba manual de la app en tu dispositivo. Si quieres realizar pruebas automatizadas, activa la verificación de accesibilidad de Espresso y Robolectric.