Mostrando entradas con la etiqueta accesibilidad móvil. Mostrar todas las entradas
Mostrando entradas con la etiqueta accesibilidad móvil. Mostrar todas las entradas

jueves, 21 de agosto de 2025

Nueva actualización del documento WCAG2ICT del W3C de aplicación de las WCAG a las TIC no web (documentos y software)

WCAG2ICT del W3C. Aplicación de las WCAG a las TIC no web como documentos o software

Hoy, 21 de agosto de 2025, el W3C ha actualizado el documento conocido como WCAG2ICT (Guidance on Applying WCAG 2 to Non-Web Information and Communications Technologies).

Es importante saber que la nueva actualización de la guía WCAG2ICT se ha coordinado con el trabajo de actualización de la norma EN 301 549, actualmente en estado "final draft" y cuya publicación se espera próximamente.

Por ello, muchos de los cambios respecto a la versión anterior tienen que ver con la armonización de algunas notas explicativas donde había orientaciones diferentes entre la EN 301 549 y las WCAG2ICT.

Recordemos que la EN 301 549 es la norma de accesibilidad que deben cumplir en Europa los productos y servicios TIC. La EN 301 549 engloba los criterios de conformidad de las WCAG más otros criterios adicionales. Las WCAG 2 se desarrollaron para la web, no para las TIC no web, por ello, abordar plenamente la accesibilidad de los documentos y el software no web implica requisitos adicionales a los incluidos en las WCAG 2 o la guía WCAG2ICT.

La versión publicada hoy abarca las WCAG 2.2 en el nivel A y AA, es decir, no incluye los requisitos AAA.

Índice

¿Qué es la guía WCAG2ICT (Guidance on Applying WCAG 2 to Non-Web Information and Communications Technologies)?

La WCAG2ICT se publicó por primera vez en 2013. Es la guía informativa, no normativa, que ofrece orientación sobre cómo aplicar las WCAG 2 a las TIC no web, como los documentos o el software (una app móvil, una aplicación de escritorio, el software de un cajero automático o de una máquina expendedora de billetes, etc.).

La WCAG2ICT ha sido un recurso clave para la inclusión de las WCAG en la legislación y los estándares de accesibilidad de las TIC a nivel mundial, como la Section 508 o la EN 301 549.

En este sentido, la WCAG2ICT ha dado lugar a algunas excepciones incluidas en estos estándares, donde algunos de los criterios de las WCAG no se requieren en contextos no web. Por ejemplo, el capítulo 10 de la EN 301 549 contiene los requisitos para los documentos y el capítulo 11 los relativos al software, en ambos capítulos, ciertos criterios de las WCAG 2 no se incluyen porque se considera que no aplican (consultar ejemplo concreto).

Artículo relacionado: Requisitos de accesibilidad de la EN 301 549 aplicables a las apps móviles nativas

Sin embargo, la WCAG2ICT no especifica qué criterios pueden o deben aplicarse, -como sí se hace en la EN 301 549-; más bien indica, si los criterios se aplicaran, cómo se aplicarían.

El grueso del documento es la inclusión de los criterios A y AA de las WCAG 2.2. En cada uno se añade una sección sobre su aplicación a documentos o software no web, siendo evidente, a menudo, las dificultades para aplicar algunos criterios de conformidad de las WCAG 2.

El documento también se preocupa en adaptar la terminología "web" que subyace en las WCAG, así como en proporcionar información sobre cuándo los criterios de las WCAG presuponen la presencia de un agente de usuario y una tecnología de apoyo.

Ten en cuenta que el software no web puede que no disponga de un agente de usuario, de un software de plataforma con una API o servicios de accesibilidad; o puede que no tenga, o no admita, tecnologías de apoyo capaces de interactuar con la información programática.

Recordemos que, por ello, la EN 301 549 distingue entre "funcionalidad abierta" y "funcionalidad cerrada" (que impide a los usuarios conectar, instalar o utilizar tecnología de asistencia). También en la WCAG2ICT encontramos esta terminología.

¿Qué aporta y que no la WCAG2ICT?

Si bien las WCAG 2 se diseñaron con neutralidad tecnológica, presuponen la presencia de un "agente de usuario", como un navegador, un reproductor multimedia o una tecnología de apoyo, que se utiliza para acceder al contenido web.

La aplicación de las WCAG 2 a documentos y software en contextos no web requiere interpretar cómo cumplir la intención de cada criterio en estos diferentes contextos. Por eso, la mayor parte del trabajo del Grupo de Trabajo WCAG2ICT se centró en evaluar cómo se aplicaría cada criterio de las WCAG 2 en el contexto de las TIC no web.

El Grupo de Trabajo WCAG2ICT concluyó que la mayoría de los criterios de las WCAG 2 pueden aplicarse a documentos y software no web sin cambios o con cambios mínimos. Dado que muchos de los criterios A y AA no incluyen términos web, se aplican directamente tal como están escritos y como se describen en la documentación "Understanding WCAG 2.2".

Por ello, se decidió proporcionar únicamente notas adicionales a cada criterio, según se considera necesario, para comprender mejor la aplicación de los criterios de conformidad de las WCAG a documentos y software no web.

En resumen, la WCAG2ICT proporciona:

  • Contexto general para la aplicación de las WCAG 2 a documentos y software no web.
  • Orientación sobre la aplicación de los principios, pautas y criterios de conformidad de las WCAG 2 (niveles A y AA) a documentos y software no web.
  • Términos clave relacionados con la aplicación de las WCAG 2 a documentos y software no web.
  • Comentarios sobre las definiciones del glosario de las WCAG 2.
  • Comentarios sobre la conformidad.
  • Información de fondo sobre algunos temas, como el comentado sobre la "funcionalidad cerrada".

Por el contrario, la WCAG2ICT:

  • No crea ni ayuda a los desarrolladores a determinar qué disposiciones de las WCAG 2 (principios, pautas o criterios de conformidad) no se deben aplicar a documentos y software no web en general, o a alguna tecnología o producto en particular, como sí hace la EN 301 549.
  • No propone cambios a las WCAG 2 ni a sus documentos de apoyo, aunque hay que indicar que el Grupo de Trabajo WCAG2ICT solicitó aclaraciones sobre la intención de varios criterios de cumplimiento, lo que condujo a aclaraciones en el documento "Understanding WCAG 2.2".
  • No plantea ninguna brecha entre los criterios de las WCAG y los requisitos de accesibilidad necesarios para abordar aspectos de las plataformas que no forman parte de la interfaz de usuario, los componentes de la interfaz de usuario como elementos individuales o el software con "funcionalidad cerrada" (aquella que impide a los usuarios conectar, instalar o utilizar tecnología de asistencia), como sí hace la EN 301 549.
  • No aborda el hardware porque las WCAG no se aplican al hardware. Recordemos que la EN 301 549 sí tiene un capítulo dedicado al hardware (el capítulo 8).
  • No proporciona técnicas para implementar las WCAG en ningún tipo de tecnología, ya sea web o no web.
  • No es un estándar y no describe cómo las TIC no web deben cumplir con las WCAG.
  • No incorpora ni interpreta ninguna de las guías complementarias de las WCAG.

Por tanto, la WCAG2ICT tiene muchas limitaciones. Se echa en falta un mayor nivel de detalle, técnicas concretas, ejemplos, etc., como esperamos que incluyan las WCAG 3.

Por otra parte, este documento por sí solo no es suficiente para garantizar la accesibilidad en documentos y software no web, puesto que no aborda requisitos de accesibilidad más allá de los contemplados por las WCAG, como sí lo hace la EN 301 549.

Relación entre la WCAG2ICT y la WCAG2Mobile (Guidance on Applying WCAG 2.2 to Mobile Applications) del W3C

El 6 de mayo de 2025 se publicó el primer borrador de la nota del W3C "Guidance on Applying WCAG 2.2 to Mobile Applications (WCAG2Mobile)", que actualmente está en estado borrador.

La WCAG2Mobile describe cómo aplicar las WCAG 2.2 específicamente a las aplicaciones móviles. El grupo de trabajo lo contempla como una evolución del documento "Mobile Accessibility: How WCAG 2.0 and Other W3C/WAI Guidelines Apply to Mobile" de 2015 (aunque con un borrador de 2018).

La WCAG2ICT y la WCAG2Mobile son documentos informativos, no normativos, tienen una estructura similar y las elaboran grupos de trabajo diferentes.

En la guía WCAG2Mobile (borrador mayo 2025) se incluye el criterio WCAG, la interpretación WCAG2ICT y las notas propias:

En la WCAG2Mobile (borrador mayo 2025) se incluye el criterio WCAG, la interpretación WCAG2ICT y las notas propias

Captura del criterio 2.4.3 de la WCAG2Mobile (borrador mayo 2025)

En cuanto al alcance, las dos guías abordan las WCAG 2.2 (nivel A y AA), pero la WCAG2ICT aclara cuándo y cómo se pueden aplicar los criterios de conformidad de las WCAG a documentos y software no web (donde se incluyen las aplicaciones móviles); mientras que la WCAG2Mobile limita el alcance solo a las aplicaciones móviles. Esto puede hacer que colisionen en algunos aspectos.

Por ejemplo, la WCAG2Mobile (borrador mayo 2025) indica que, dado que la unidad de conformidad en las WCAG 2 es una sola página web, el grupo de trabajo acordó que la unidad de conformidad equivalente para aplicaciones móviles sería una sola pantalla dentro de la aplicación. Por consiguiente, una unidad de evaluación equivalente para un "conjunto de páginas web" sería un "conjunto de pantallas", no un "conjunto de software", que es lo que interpreta la WCAG2ICT (consultar apartado "Adaptación de la terminología" de este documento).

“Contenido” y “agente de usuario” son términos del glosario WCAG2ICT que deben interpretarse de manera significativamente diferente cuando se aplican a aplicaciones móviles.

Los términos del glosario «documento» y «software» en WCAG2ICT se sustituyen por los términos definidos «pantalla» y «vista». Los términos del glosario «conjunto de páginas web», «conjunto de documentos» y «conjunto de programas de software» se sustituyen por el término definido «conjunto de pantallas».

El término «servicios de accesibilidad del software de plataforma», introducido por WCAG2ICT, se ha modificado para reflejar su uso diferenciado en aplicaciones móviles. Además, «funcionalidad cerrada» tiene un significado diferente en el contexto de las aplicaciones móviles.

WCAG2Mobile (borrador mayo 2025)

La WCAG2Mobile está en estado borrador, por lo que todo esto podría cambiar. Cuando se publique la versión final haré un artículo específico sobre ella.

Adaptación de la terminología

Algunos criterios de las WCAG 2 están redactados para aplicarlos a "un conjunto de páginas web" o "varias páginas web", y dependen de que todas las páginas del conjunto compartan alguna característica o comportamiento.

Dado que la unidad de conformidad en las WCAG 2 es una sola página web, el grupo de trabajo acordó que la unidad de conformidad equivalente para documentos no web es un solo documento. Por lo tanto, una unidad de evaluación equivalente para un "conjunto de páginas web" sería un "conjunto de documentos".

Puesto que no es posible dividir inequívocamente el software no web, una sola "página web" se equiparó a un "programa de software" y un "conjunto de páginas web" se equiparó a un "conjunto de programas de software".

Un "documento" se define como un conjunto de contenido, como un archivo, un conjunto de archivos o contenido multimedia en streaming, que funciona como un único elemento en lugar de como una colección, que no forma parte de un software y que no incluye su propio agente de usuario. Y ponen como ejemplo un documento de tipo carta, una hoja de cálculo, un correo electrónico, un libro, una imagen, una presentación o una película.

Aclarado esto, hay dos términos que me parece relevante conocer: "accessibility services of platform software" y "closed functionality".

"accessibility services of platform software" son los servicios proporcionados por un sistema operativo, un agente de usuario u otro software de plataforma que permiten que los documentos o el software no web expongan información sobre la interfaz de usuario y sobre los eventos que ocurren a las tecnologías de apoyo (lectores de pantalla, acceso por voz, etc.) y a las funciones de accesibilidad del software.

Una nota aclara que estos servicios suelen proporcionarse en forma de API de accesibilidad y que proporcionan una comunicación bidireccional con las tecnologías de apoyo, incluida la exposición de la información sobre los objetos y eventos.

En cuanto a "closed functionality", tiene el mismo significado que en la EN 301 549, aquella que impide a los usuarios conectar, instalar o utilizar tecnología de asistencia, como puede ocurrir en los dispositivos IoT (Internet of Things), en un quiosco informativo o en una máquina expendedora de billetes.

Se pueden consultar todas las definiciones en el apartado de términos clave del documento.

Ejemplos concretos

Ejemplo: criterio 4.1.12 Espaciado del texto

Por ejemplo, veamos qué información se ofrece para el criterio "4.1.12 Espaciado del texto".

En primer lugar, se incluye literalmente el criterio 4.1.12 de las WCAG 2.2 con sus notas. A continuación, se añaden las notas adicionales para los documentos (1 nota) y el software no web (3 notas).

La nota relativa a los documentos indica que existen varios mecanismos que permiten a las personas modificar las propiedades de espaciado de texto de un documento implementado con un lenguaje de marcas.

Por ejemplo, una tecnología de libros electrónicos puede contar con un agente de usuario que permite anular los estilos de texto del documento. Cuando dicho mecanismo está disponible, el criterio exige que el contenido responda adecuadamente a él.

En las notas relativas al software no web se indica que:

  • Existen varios mecanismos que permiten a las personas modificar las propiedades de espaciado de texto del software implementado en un lenguaje de marcas. Por ejemplo, una aplicación de software puede proporcionar una función de "hoja de estilo personal" para modificar la apariencia de la interfaz de usuario.

    Este criterio no implica que el software no web deba implementar sus propios mecanismos para que las personas puedan configurar el espaciado de texto; sin embargo, cuando dicho mecanismo está disponible, el criterio de éxito exige que el contenido responda adecuadamente a él.

  • El "contenido implementado mediante un lenguaje de marcas" incluye partes del software que utilizan el marcado internamente para definir una interfaz de usuario. Entre los ejemplos de lenguajes de marcas que se utilizan internamente para definir una interfaz de usuario se incluyen, entre otros: HTML (por ejemplo, en aplicaciones Electron o vistas web de aplicaciones iOS), XAML, XML (por ejemplo, en diseños de aplicaciones Android) y XUL.

Ejemplo: criterio 3.2.3 Navegación consistente

Se modifica la redacción del criterio "3.2.3 Navegación consistente" según los cambios terminológicos que hemos comentado:

"3.2.3 Navegación consistente: los mecanismos de navegación que se repiten en varios documentos no web dentro de un conjunto de documentos no web, o en varios programas de software dentro de un conjunto de programas de software, ocurren en el mismo orden relativo cada vez que se repiten, a menos que el usuario inicie un cambio."

En la nota 3 se indica que los conjuntos de software que cumplen con esta definición parecen ser extremadamente raros, por esa razón, añado yo, en la EN 301 549 se ha eliminado este criterio del capítulo 11 relativo al software.

Enlaces relevantes

Artículos relacionados

Artículo redactado manualmente sin herramientas IA, salvo para la revisión ortográfica

Imagen inicial generada con ChatGPT.

lunes, 26 de febrero de 2024

Vídeo: "Novedades de las WCAG 2.2", presentación de Olga Carreras en el webinar "¿Quieres conocer las últimas novedades en materia de accesibilidad digital?"

Os dejo el enlace a las presentaciones y al vídeo del webinar "¿Quieres conocer las últimas novedades en materia de accesibilidad digital?" en el que tuve el placer de participar hace unos días, hablando sobre las novedades de las WCAG 2.2.

Enlace al vídeo en YouTube

Enlace a la presentación: Explorando las novedades de la WCAG 2.2. Olga Carreras Montoto.

El orden de las ponencias fue el siguiente, cada una es un enlace a la descarga de su presentación:

Artículo relacionado:

lunes, 3 de julio de 2023

Reseña del libro "Guía Aplicaciones móviles accesibles" de Olga Carreras

Portada del libro Guía Aplicaciones móviles accesibles de Olga Carreras

Autor: Olga Carreras

Nº páginas: 103

Idioma: español

Formato: digital (PDF accesible y gratuito)

Fecha de publicación: 2023

Descarga: CEDID, Centro Español de Documentación e Investigación sobre Discapacidad

Podéis consultar más reseñas de libros en: "Libros y reseñas"

Os presento mi nuevo libro "Guía Aplicaciones móviles accesibles". Tengo que agradecer al Centro Español de Subtitulado y Audiodescripción (CESyA) y la Universidad Carlos III de Madrid, y en concreto a Lourdes Moreno, que hayan confiado en mí para elaborar esta guía y que se publique de forma gratuita. La guía está en el marco del proyecto Access2citizen, puesto en marcha por el Real Patronato sobre Discapacidad, a través del Centro Español de Subtitulado y Audiodescripción (CESyA).

El libro es una guía divulgativa sobre la accesibilidad en aplicaciones móviles. Está dirigida a cualquier persona que quiera comprender qué es una aplicación móvil accesible y qué requisitos debe cumplir, sin necesidad de tener conocimientos técnicos específicos para ello. En ella explico de manera sencilla todos los requisitos de la norma de accesibilidad EN 301 549.

La guía está dividida en dos partes y un anexo:

  • Parte I. Introducción, normativa y legislación.

    En esta parte explico qué es una aplicación móvil accesible, cómo utilizan las personas con discapacidad las aplicaciones móviles y qué tipo de aplicaciones móviles existen. Repaso los diferentes estándares de accesibilidad y el marco regulador de la accesibilidad digital en España y Europa.

  • Parte II. Requisitos de accesibilidad.

    En esta parte recorro todos los requisitos de accesibilidad que deben cumplir las aplicaciones móviles según la norma ‘EN 301 549: Requisitos de accesibilidad de productos y servicios TIC aplicables a la contratación pública en Europa’. Los requisitos están explicados de manera sencilla y con ejemplos, sin entrar en aspectos de desarrollo técnico. El objetivo es que puedan ser comprendidos por todas las personas, independientemente de su perfil profesional.

  • En el Anexo I se recogen todos los requisitos en una lista de verificación.

Como he indicado, en la segunda parte de la guía explico todos requisitos de la EN 301 549 que aplican a las apps. Muchos de ellos aplican también a las páginas web, de modo que puede servir de guía para aquellas personas que estén interesadas en comprender mejor la EN 301 549 sea cual sea su ámbito de aplicación.

Fe de erratas

  • Página 65: "y el tamaño medio de un pulsar pulgar 72 píxeles"

Accesibilidad de páginas web y aplicaciones móviles de los servicios de emergencia 112

En el marco del proyecto Access2citizen se ha publicado también el libro "Panorámica de la accesibilidad de páginas web y aplicaciones móviles de los servicios de emergencia 112", de Lourdes Moreno López, Ángela Díaz Redondo.

Portada del libro Accesibilidad de páginas web y aplicaciones móviles de los servicios de emergencia 112

Presenta una panorámica sobre la accesibilidad en diferentes soportes proporcionados por los servicios de emergencia. En concreto, páginas web y aplicaciones móviles de los servicios de emergencias a nivel nacional y, en especial, del 112.

El documento se divide en tres grandes partes:

  • Parte I. Introducción y normativa. En esta parte se recoge la principal legislación sobre la accesibilidad en los servicios de emergencia, tanto del marco regulador europeo como del nacional.
  • Parte II. Hacia un servicio 112 accesible y universal. En esta parte el objetivo es brindar una comprensión detallada de los diferentes perfiles de discapacidad existentes y sus necesidades en relación con las Tecnologías de la Información y la Comunicación (TIC), así como, definir una serie de recomendaciones que es necesario tener en cuenta a la hora de implementar soluciones 112 accesibles, tanto para web como aplicaciones móviles.
  • Parte III. Evaluación de accesibilidad de los servicios de emergencia 112. En esta parte se presenta el análisis realizado de las evaluaciones de accesibilidad de aplicaciones móviles 112 existentes y las páginas web informativas correspondientes al 112 de las CCAA y otros servicios de emergencias como son el 016, 024, 062 y el 091. También se incluye la metodología propuesta para llevar a cabo dichas evaluaciones.

Artículos relacionados:

lunes, 10 de septiembre de 2018

Requisitos de accesibilidad de la EN 301 549 aplicables a las apps móviles nativas, obligatorios por ley a partir de 2021

EN 301549 - Apps nativas. Deben cumplir el nivel AA de las WCAG 2.1 (excepto los criterios 2.4.1, 2.4.2, 2.4.5, 3.1.2, 3.2.3, 3.2.4) más, de manera condicional, los requisitos de los capítulos 5. Requisitos generales, 6. Requisitos  si hay comunicación bidireccional, 7.Requisitos si hay capacidad de vídeo y 11.8 Requisitos si es una herramienta de autor. De manera no condicional hay que cumplir con los requisitos de los capítulos 11.1-11.7 Software y  12. Documentación y servicio de apoyo.

Última actualización: 22/12/2022

El objetivo de este artículo es clarificar qué requisitos tienen que cumplir las apps nativas para ser conformes con la norma de accesibilidad EN 301 549.

La norma EN 301 549 (V3.2.1 (2021-03) - PDF, 2.2MB) es la norma europea que recoge los requisitos de accesibilidad de todos los productos y servicios TIC, incluidas páginas web, documentos electrónicos o apps móviles.

El 20 de septiembre entró en vigor el "Real Decreto sobre la accesibilidad de los sitios web y aplicaciones para dispositivos móviles del Sector Público" que traspone la Directiva europea 2016/2102 y que obliga a que las apps nativas, al menos del sector público, sean accesibles a partir del 23 de junio de 2021 de acuerdo con la norma EN 301 549.

Aunque el grueso de los requisitos que hay que cumplir es el nivel AA de las WCAG (de las WCAG 2.1 desde la actualización de la norma en agosto de 2018) también hay otros requisitos obligatorios, como los referentes a la documentación y servicios de soporte que se ofrecen, la interoperabilidad con los productos de apoyo o las preferencias del usuario; así como otros en función de si la app ofrece determinadas características como comunicación bidireccional por voz, reproducción de vídeos o si se trata de una herramienta de autor.

Si quieres primero tener un conocimiento general de la norma EN 301 549, te recomiendo que leas mi artículo: EN 301 549: norma europea de Accesibilidad para productos y servicios de Tecnologías de la Información y Comunicación (TIC)

Si necesitas profundizar en cómo aplicar los requisitos a nivel de código, te recomiendo mi artículo: Apps nativas de Android accesibles

También puedes consultar cómo se aplica la norma EN 301 549 a las páginas web en el artículo anterior: Requisitos de accesibilidad de la EN 301 549 aplicables a las páginas web, puesto que ahora las páginas web deben ser accesibles también respecto a la EN 301 549.

Si quieres consultar de forma esquemática todos los requisitos que aplican a páginas web, apps nativas y documentos electrónicos, puedes consultar la tabla de equivalencia entre las WCAG y la EN 301 549, en el "Tabla de los requisitos de la EN 301 549 v3.2.1 (2021-03) aplicables a sitios web, documentos y apps nativas. Correspondencia con las WCAG 2.1" (Excel, 101 KB, actualizada en 2022)

Por último, si quieres conocer las obligaciones del nuevo Real Decreto 1112/2018, puedes consultar el artículo: Real Decreto 1112/2018 sobre accesibilidad de los sitios web y aplicaciones para dispositivos móviles del sector público

Portada del libro Guia Aplicaciones moviles accesible. EN 301 549. Olga Carreras Montoto.

Aguía Aplicaciones móviles accesibles

Olga Carreras, 2023

Un guía divulgativa sobre la accesibilidad en aplicaciones móviles. Está dirigida a cualquier personas que quiera comprender qué es una aplicación móvil accesible y qué requisitos debe cumplir sin necesidad de tener conocimientos técnicos específicos.

En la guía explico todos los requisitos de la EN 301 549. También incluye un anexo con una lista de verificación.

Leer reseña

Descarga gratuita del libro "Guía Aplicaciones móviles accesible" en PDF accesible (10MB)

Índice:

Nivel AA de las WCAG 2.1

En primer lugar las apps nativas deben cumplir con el nivel AA de las WCAG 2.1.

Sin embargo, hay 6 criterios de las WCAG 2.1 que no se aplican a las apps nativas y no sería necesario cumplir:

  • 2.4.1 Evitar bloques A
  • 2.4.2 Título de las páginas A
  • 2.4.5 Múltiples vías AA
  • 3.1.2 Idioma de las partes de la página AA
  • 3.2.3 Navegación coherente AA
  • 3.2.4 Identificación coherente AA
  • 4.1.3 Mensajes de estado AA, desde la versión 3.1.1 de la norma EN 301 549, el criterio 4.1.3 sí aplica a las apps (en las versiones anteriores no aplicaba)

Esto implica cumplir con 28 criterios de nivel A (2 menos respecto a las páginas web), 16 criterios de nivel AA (4 menos respecto a las páginas web), y los 5 requisitos de conformidad.

Requisitos del capítulo "11. Software"

En el capítulo 11 se listan todos los requisitos de accesibilidad que debe cumplir el software, donde se incluyen las apps nativas. En los subcapítulos 11.1-11.4 se referencian los criterios relativos a las WCAG 2.1, como hemos visto en el apartado anterior.

Pero además se incluyen 3 subcapítulos más (11.5-11.7) con otros requisitos adicionales.

11.5 Interoperabilidad con los productos de apoyo

Cuando el software proporciona una interfaz de usuario (11.5.2.3), como es el caso de una aplicación móvil, utilizará los servicios de accesibilidad documentados de la plataforma aplicables. Si estos no permiten que el software cumpla con los requisitos del 11.5.2.5 al 11.5.2.17, utilizará otros servicios documentados para interoperar con los productos de apoyo. Se indica que es una buena práctica desarrollar software con herramientas que implementen automáticamente los servicios de accesibilidad de la plataforma subyacente.

Los requisitos del 11.5.2.5 al 11.5.17 solo se aplican si el software no proporciona funcionalidades cerradas (funcionalidades limitadas por características que impiden a un usuario instalar, conectar o utilizar productos de apoyo), de lo contrario se aplicaría el capítulo 5.1.

Todos estos requisitos se aplican cuando el software proporciona una interfaz de usuario. En ellos se identifican características de la interfaz de usuario que se deben exponer mediante los servicios de accesibilidad, y que deben exponerse determinados por software para que puedan ser comprendidos por los productos de apoyo.

  • 11.5.2.5 Información del objeto: el rol, el estado, los límites, el nombre y la descripción de los elementos de la interfaz.
  • 11.5.2.6 Fila, columna y cabeceras: la fila y la columna de cada celda de una tabla de datos, y los encabezados de fila y columna, si están presentes.
  • 11.5.2.7 Valores: el valor actual de un elemento de la interfaz de usuario y cualquier valor mínimo o máximo del rango, si el elemento de la interfaz de usuario transmite información sobre un rango de valores.
  • 11.5.2.8 Relaciones de etiquetado: la relación entre los elemento de la interfaz de usuario y sus etiquetas.
  • 11.5.2.9 Relaciones padre-hijo: la relación entre un elemento de la interfaz de usuario con otros elementos que sean padres o hijos del mismo.
  • 11.5.2.10 Texto: el contenido, los atributos y el límite del texto renderizado en pantalla.
  • 11.5.2.11 Lista de acciones disponibles: lista de las acciones disponibles que se pueden ejecutar con un elemento de la interfaz de usuario.
  • 11.5.2.12 Ejecución de acciones disponibles: siempre que lo permitan los requisitos de seguridad, deberá permitir la ejecución de las acciones expuestas en la cláusula 11.2.5.11 por los productos de apoyo.
  • 11.5.2.13 Seguimiento del foco y de los atributos de selección: la información sobre el foco, el punto de inserción de texto y los atributos de selección de los elementos de la interfaz de usuario.
  • 11.5.2.14 Modificación del foco y de los atributos de selección: donde lo permitan los requisitos de seguridad, se debe permitir que los productos de apoyo modifiquen los atributos del foco, de inserción de texto y de selección de los elementos de la interfaz de usuario, cuando el usuario puede modificar estos elementos.
  • 11.5.2.15 Notificación de cambios: también se debe exponer los cambios en los atributos de los elementos de la interfaz de usuario, determinables por software, a los que se hace referencia en los requisitos del 11.5.2.5 al 11.5.2.11 y 11.5.2.13.
  • 11.5.2.16 Modificaciones de los estados y propiedades: cuando lo permitan los requisitos de seguridad, se debe permitir que los productos de apoyo modifiquen los estados y las propiedades de los elementos de la interfaz de usuario, cuando el usuario puede modificar estos elementos.
  • 11.5.2.17 Modificación de valores y texto: cuando lo permitan los requisitos de seguridad, se debe permitir que los productos de apoyo modifiquen los valores y el texto de los elementos de la interfaz de usuario utilizando los métodos de entrada de la plataforma, cuando el usuario puede modificar estos elementos sin el uso de productos de apoyo.

Podéis ver ejemplos concretos de código para cumplirlo en el caso de las apps nativas de Android en mi artículo: Apps nativas de Android accesibles

11.6.2 No alteración de las características de accesibilidad

El desarrollador no debe alterar o inteferir en aquellas características de accesibilidad que se definen en la documentación de la plataforma, salvo cuando así lo solicite el usuario al operar con la aplicación. Es decir, si el usuario tiene activa la lupa o el lector de pantalla, la aplicación no debe anular o interrumpir estas funciones, a menos que incluyas una opción específica en la aplicación para que el usuario lo haga.

11.7 Preferencias de usuario

Cuando el software proporciona una interfaz de usuario, debe proporcionar suficientes modos de operación que usen las preferencias de usuario definidas en los ajustes de la plataforma respecto al color, contraste, tipo de fuente, tamaño de fuente y cursor de foco, excepto para el software diseñado para aislarse de sus plataformas subyacentes. El software que está aislado de su plataforma subyacente no tiene acceso a la configuración del usuario en la plataforma y, por lo tanto, no puede adherirse a ella.

Es decir, que si a nivel de preferencias de la plataforma tienes configurado, por ejemplo, un cursor o tamaño de fuente grande o un modo de alto contraste, la app debe respetarlo y permitir al usuario operar con las preferencias definidas en la plataforma.

Requisitos del capítulo "12. Documentación y servicio de soporte"

12.1 Documentación del producto

Son los requisitos que debe cumplir la documentación de la app.

  • 12.1.1 Accesibilidad y características de compatibilidad: la documentación, tanto si se proporciona por separado o integrada, debe enumerar y explicar cómo usar las características de accesibilidad y compatibilidad (como las funciones de accesibilidad incorporadas y las funciones de accesibilidad que brindan compatibilidad con los productos de apoyo).
  • 12.1.2 Documentación accesible: la documentación estará disponible al menos en uno de los siguientes formatos electrónicos
    • formato web accesible
    • documento electrónico accesible

    Esto no excluye la posibilidad de que se proporcione también en otros formatos electrónicos o impresos no accesibles.

    Tampoco excluye la posibilidad de proporcionar formatos alternativos que satisfagan las necesidades de un tipo específico de usuarios (por ejemplo, documentos en braille para personas ciegas, o información en Lectura fácil para personas con discapacidad cognitiva).

    Si la documentación es parte integral del producto, se proporciona a través de una interfaz de usuario accesible.

12.2 Servicios de soporte

En el apartado 12.2.1 se clarifica que un servicio de soporte puede ser: help desk, call center, soporte técnico, TRS o servicio de capacitación. Por tanto, si la app no ofrece estos servicios no se aplicarán estos requisitos.

  • 12.2.2 Información sobre accesibilidad y características de compatibilidad: los servicios de soporte deben proporcionar información sobre las características de accesibilidad y compatibilidad que se incluyen en la documentación del producto (como funciones de accesibilidad incorporadas y funciones de accesibilidad que brindan compatibilidad con los productos de apoyo).
  • 12.2.3 Comunicación efectiva: el servicio de soporte deberá satisfacer las necesidades de las personas con discapacidad, bien directamente, bien a través de un punto de referencia.
  • 12.2.4 Documentación accesible: la documentación proporcionada por los servicios de soporte estará disponible en al menos uno de los siguientes formatos:
    • formato web accesible
    • documento electrónico accesible

    Esto no excluye la posibilidad de que se proporcione también en otros formatos electrónicos o impresos no accesibles.

    Tampoco excluye la posibilidad de proporcionar formatos alternativos que satisfagan las necesidades de un tipo específico de usuarios (por ejemplo, documentos en braille para personas ciegas, o información en Lectura fácil para personas con discapacidad cognitiva).

Requisitos del capítulo "5. Requisitos generales"

Se aplican salvo en el caso de funcionalidad cerrada. La funcionalidad cerrada hace referencia a las funcionalidades limitadas por características que impiden a un usuario instalar, conectar o utilizar productos de apoyo.

  • 5.2 Activación de características de accesibilidad: para activar las características de accesibilidad documentadas para satisfacer una necesidad específica no se puede depender de un método que esa necesidad no soporte.
  • 5.3 Biométrica: cuando se utilizan características biológicas (huellas dactilares, patrones de retina, etc.) para el control del producto o para la identificación del usuario, no pueden basarse, como único medio, en una característica biológica particular, sino que debe haber medios alternativos (que pueden ser biométricos o no). Los métodos biométricos basados ​​en características biológicas diferentes aumentan la probabilidad de que las personas con discapacidad posean al menos una de las características biológicas especificadas. Ejemplos de características biológicas diferentes son las huellas dactilares, los patrones de la retina del ojo, de voz y de cara.
  • 5.4 Preservación de la información de accesibilidad durante la conversión: si el producto convierte información o una comunicación, debe preservar la información de accesibilidad, en la medida en que dicha información pueda estar contenida o soportada por el formato de destino.
  • 5.5 Elementos accionables: cuando haya partes operables que requieran apretar, pellizcar o torcer la muñeca para operar, se proporcionará un medio alternativo accesible que no requiera estas acciones. Además se proporcionará un medio para discernir cada parte operable, sin requerir la visión y sin realizar la acción asociada con la parte operable. Una forma de cumplir este requisito es haciendo que las partes operables sean discernibles táctilmente.
  • 5.6 Controles de bloqueo o conmutación (por ejemplo la tecla "Bloq Mayús", el botón de volumen de un teléfono, etc.) Si se presenta visualmente, se deberá determinar su estado por el tacto o el sonido sin operar el control; en caso contrario, si no se presenta visualmente, al menos se proporcionará un modo de funcionamiento en el que el estado del control pueda determinarse visualmente cuando se presente el control.
  • 5.7 Repetición de caracteres de teclado: si no se puede desactivar, el retardo antes de la repetición debería poderse ajustar al menos a 2 segundos, y el ratio de repetición de la tecla ser ajustable hasta un carácter cada 2 segundos.
  • 5.8 Aceptación de pulsación de doble tecla: el retardo después de cualquier pulsación de tecla, durante el cual no se aceptará una pulsación de tecla adicional si es idéntica a la pulsación de tecla anterior, será ajustable al menos a 0,5 segundos.
  • 5.9 Acciones simultáneas del usuario (por ejemplo tener que usar ambas manos para abrir la tapa de un ordenador portátil, tener que presionar dos o más teclas al mismo tiempo o tener que tocar una superficie con más de un dedo). Se proporcionará al menos un modo de funcionamiento que no requiera acciones simultáneas de los usuarios al operar. Está muy relacionado con el nuevo criterio "2.5.1 Pointer gestures (A)" de las WCAG 2.1

Requisitos del capítulo "6. Requisitos aplicables cuando hay comunicación bidireccional de voz"

En el caso de que en la app se permita la comunicación bidireccional de voz (emisor y receptor intercambian mensajes de voz) se deben cumplir los siguientes requisitos:

  • 6.1 Ancho de banda para voz: a fin de proporcionar una buena calidad de audio, se podrá codificar y decodificar la comunicación de voz bidireccional con un rango de frecuencia con un límite superior de al menos 7000 Hz (recommendation ITU-T G.722).
  • 6.2 Funcionalidad de texto en tiempo real (RTT):
    • 6.2.1 Proveer RTT: cuando se admita comunicación bidireccional de voz en un contexto de uso específico, se permitirá que un usuario se comunique con otro mediante RTT. Se deberá proporcionar un mecanismo para seleccionar un modo de operación que permita la voz y el texto simultáneos.
    • 6.2.2 Visualización de RTT: el texto enviado y el texto recibido estarán separados y se diferenciarán visualmente. Además, la dirección de envío / recepción del texto transmitido se podrá determinar mediante programación (a menos que el RTT tenga funcionalidad cerrada) para permitir que los lectores de pantalla puedan distinguir entre el texto entrante y el texto saliente cuando se utilizan con la funcionalidad RTT. Por otra parte, se tendrá que identificar al hablante y haber un indicador visual de la actividad de audio en pantalla.
    • 6.2.3 Interoperabilidad: cuando soportas RTT y interactúas con otro producto con funcionalidad RTT, se deben soportar al menos uno de los cuatro mecanismos de interoperabilidad que se describen.
    • 6.2.4 Respuesta de RTT: que se establece en 500 milisegundos.
  • 6.3 Identificación de llamadas: si se proporciona identificación de llamadas o funciones de telecomunicaciones similares, la identificación de la persona que llama y las funciones de telecomunicaciones similares estarán disponibles en formato texto y en al menos otra modalidad.
  • 6.4 Alternativas a los servicios basados en voz: cuando se proporciona un servicio de comunicación basado en voz en tiempo real y opciones de buzón de voz, asistente automático o respuesta interactiva de voz, se debe ofrecer a los usuarios un modo de acceder a la información, así como de realizar las tareas facilitadas, sin que sea necesario el uso de la audición o de la voz.
  • 6.5 Comunicación mediante vídeo: proporciona requisitos de rendimiento que respaldan a los usuarios que se comunican mediante el lengua de signos y la lectura de labios, como una resolución de vídeo QVGA como mínimo, al menos una frecuencia de imagen de 20 frames por segundo o una diferencia máxima de tiempo de 100 ms entre la voz y la imagen de vídeo presentada al usuario. Incluye también otros requisitos como proporcionar un indicador visual de audio con vídeo o la indicación del hablante en la comunicación por vídeo en lenguaje de signos.

Requisitos del capítulo "7. Requisitos aplicables cuando hay capacidad de vídeo"

Si tu app incluye vídeo, deberá cumplir estos requisitos que hacen referencia a los subtítulos, la audiodescripción y los controles de usuario para controlarlos.

Recordemos que las WCAG 2.0/2.1 obligan a incluir subtítulos y audiodescripciones a los vídeos para alcanzar el nivel AA.

7.1 Subtítulos

Los requisitos para los subtítulos son:

  • 7.1.1 Reproducción de los subtítulos: debe haber un mecanismo para mostrar los subtítulos disponibles.
  • 7.1.2 Sincronicación de los subtítulos: el mecanismo para mostrar los subtítulos deberá preservar la sincronización entre el audio y los subtítulos.
  • 7.1.3 Preservación de los subtítulos: si el producto retransmite, convierte o graba vídeo con audio sincronizado, se deberán preservar los subtítulos de manera que puedan presentarse de forma consistente con los puntos anteriores (7.1.1 y 7.1.2). Los aspectos de presentación adicionales de los subtítulos, como la posición de la pantalla, los colores, estilo o tipografía del texto, pueden transmitir significado, de modo que alterar estos aspectos de presentación podría cambiar el significado y debería evitarse siempre que sea posible.
  • 7.1.4 Características de los subtítulos: cuando se proporcionen subtítulos, el usuario tiene que poder adaptarlos a sus necesidades, por ejemplo, personalizando el tamaño y color de los mismos.
  • 7.1.5 Subtítulos hablados: se tiene que facilitar una salida hablada de los subtítulos disponibles.

7.2 Audiodescripción

Si no tienes muy claro qué es una audiodescripción, puedes consultar un ejemplo en: Ejemplo de audiodescripción en YouTube

Los requisitos para las audiodescripciones son:

  • 7.2.1 Reproducción de la audiodescripción: cuando se muestre video con audio sincronizado, se proporcionará un mecanismo para seleccionar y reproducir la audiodescripción disponible en el canal de audio predeterminado. Cuando la tecnología de video utilizada no tenga mecanismos explícitos y separados para la audiodescripción, se considerará que satisface este requisito si se permite al usuario seleccionar y reproducir varias pistas de audio. En tales casos, el contenido del video puede incluir la audiodescripción como una de las pistas de audio disponibles. Se indica además que el soporte para las audiodescripciones ampliadas es también muy útil.
  • 7.2.2 Sincronicación de la audiodescripción: cuando hay un mecanismo para reproducir la audiodescripción se debe preservar la sincronización entre el contenido del audio/video y la audiodescripción.
  • 7.2.3 Preservación de la audiodescripción: si el producto retransmite, convierte o graba vídeo con audio sincronizado se deberán preservar los datos de la audiodescripción de modo que se pueda reproducir de forma consistente con los puntos anteriores (7.2.1 y 7.2.2).

Si quieres recordar las alternativas que debes ofrecer en los vídeos y audios para cumplir con las WCAG 2.1 puedes consultar el artículo: Tabla resumen de los requisitos de accesibilidad para los medios tempodependientes según las WCAG 2.1

7.3 Controles de usuario

Los controles para activar los subtítulos y la audiodescripción deben estar al mismo nivel de interacción que el resto de controles habituales (reproducir, pausa...), es decir, en el mismo número de pasos.

Además, se indica que es una buena práctica que se incluyan controles adicionales que permitan al usuario seleccionar si los subtítulos y la audiodescripción se activan o desactivan de manera predeterminada.

Requisitos del capítulo "11.8. Software (Herramientas de autor)"

También aplican a las apps nativas los criterios del subcapítulo 11.8 si la app es una herramienta de autor, es decir, una app que genera páginas web o documentos electrónicos:

  • 11.8.2 Creación de contenido accesible: las herramientas de autor deben permitir y guiar la producción de contenido que cumpla con los requisitos de accesibilidad para las páginas web y los documentos electrónicos (nivel AA de las WCAG 2.1)
  • 11.8.3 Preservación de información de accesibilidad en transformaciones: si la herramienta de autor proporciona transformaciones de reestructuración o transformaciones de codificación, la información de accesibilidad se conservará en la salida, siempre y cuando existan mecanismos equivalentes en la tecnología de salida. Una transformación de reestructuración es aquella en la que el contenido permanece igual, pero las características estructurales del contenido se modifican, por ejemplo, tablas linealizadas o la división de un documento en páginas. Una transformación de codificación es aquella en la que se modifica la tecnología utilizada para codificar el contenido. Por ejemplo, si una app transformar un documento de texto o una página web en un PDF, el PDF debe preservar las características de accesibilidad (título del documento, texto alternativo de las imágenes, información semántica de los elementos, etc.)
  • 11.8.4 Asistencia para la reparación: si la funcionalidad de verificación de accesibilidad de una herramienta de autor puede detectar que el contenido (tanto en páginas web como en documentos electrónicos) no cumple con los requisitos de las WCAG 2.1, la herramienta de autor deberá proporcionar sugerencias de reparación. Esto no excluye la reparación automática y semi-automatizada, que es posible (y recomendada) para muchos tipos de problemas de accesibilidad del contenido.
  • 11.8.5 Plantillas: cuando una herramienta de autor proporciona plantillas, debe estar disponible al menos una plantilla (de página web o de documento electrónico, según corresponda) que admita la creación de contenido que cumpla con los requisitos de las WCAG 2.1, y debe estar identificada como plantilla accesible.

Recursos de interés

Artículos relacionados:

lunes, 19 de febrero de 2018

Apps nativas de Android accesibles

Código ImageView. Una alerta indica que no tiene contentDescription

En este artículo explico cómo hacer una app nativa de Android accesible, con ejemplos de código, y cómo aplicar los requisitos de la EN 301 549.

A partir del 23 de junio de 2021 las apps deberán ser accesibles.

Hasta que se apruebe el Real Decreto que traspone este año la Directiva (UE) 2016/2102 a la legislación española, solo podemos asegurar que al menos deberán ser accesibles las apps del sector público.

Existen diferentes tipos de aplicaciones móviles (web, híbrida, híbrida mixta, nativa). En otros artículos del blog he tratado la accesibilidad móvil desde diversos puntos de vista, pero en este caso abordo solo la accesibilidad en las apps nativas de Android.

El artículo se organiza en tres partes:

  • Parte 1. Principales requisitos y buenas prácticas para mejorar sustancialmente la accesibilidad de las apps nativas de Android, con ejemplos de código.
  • Parte 2. Aplicación de la norma EN 301 549 a las apps nativas de Android. En la primera parte no enumero todos los requisitos obligatorios que debe cumplir una app para ser accesible de acuerdo a la próxima obligación legal. Eso lo hago en esta segunda parte.
  • Parte 3. Revisión y herramientas.

Índice

Parte 1. Principales requisitos y buenas prácticas de accesibilidad para las apps nativas de Android

El objetivo de esta primera parte es repasar los requisitos de accesibilidad más importantes que deberían cumplir las apps nativas de Android, puesto que suponen los problemas más graves y habituales en las aplicaciones.

1.1 Conocer las características de accesibilidad de Android

El primer requisito para poder hacer apps accesibles es:

  • Conocer cómo usan las personas con discapacidad los dispositivos móviles y los problemas que suelen encontrarse.
  • Conocer las funciones de accesibilidad de Android, probarlas y familiarizarse con ellas, puesto que deberás:
    • asegurarte de que tu app es compatible con ellas y que no interfiere en su uso;
    • testear tu app con las diversas funciones y servicios de accesibilidad activos (TalkBack, texto grande, etc.).

1.1.1 Necesidades de las personas con discapacidad

  • Las personas ciegas necesitan que la información que se presenta en pantalla se convierta a voz y/o Braille, siendo esta segunda opción imprescindible para las personas sordociegas.
  • Las personas con baja visión necesitan ampliar la pantalla e incrementar el contraste.
  • Las personas daltónicas necesitan medios alternativos para distinguir la información que se transmite solo por el color.
  • Los usuarios sordos necesitan alternativas al audio, en algunos casos textuales (subtítulos, mensajes de texto para alertas sonoras), pero que en otros casos pueden ser alternativas hápticas, como una vibración.
  • Los usuarios sordos cuya lengua materna es la lengua de signos preferirían recibir la información en lengua de signos y comunicarse con ella, y no mediante texto.
  • Las personas con problemas de audición necesitan que el audio sea claro, poder aumentar el volumen y silenciar los ruidos extraños.
  • Muchas personas con discapacidad motriz no pueden usar un teclado o una pantalla táctil, ellos necesitan usar la entrada de voz o dispositivos de entrada especializados, como un pulsador (single switch).
  • Las personas con dislexia necesitarán un diseño claro y agradecerán una opción de salida de texto a voz.
  • Las personas con limitaciones en el habla no podrán utilizar aplicaciones que requieran la entrada de voz.
  • Las personas con discapacidad cognitiva necesitarán textos e instrucciones claras, simples y consistentes.
  • Los usuarios con epilepsia se verán afectados por los contenidos que destellan y necesitarán poder deshabilitarlos.
  • Las personas extranjeras cuya lengua no sea la de nuestra aplicación, así como las personas con menor experiencia en el uso de aplicaciones móviles, como pueden ser las personas mayores, también se beneficiarán de estas soluciones.
  • Hay muchas personas que por culpa de un accidente o de una enfermedad, o cualquiera de nosotros en determinadas circunstancias y contextos de uso, tenemos temporalmente las mismas limitaciones que cualquiera de las personas mencionadas.

Basado en "First Seven Steps to accessible mobile apps > Learn about Accessibility", OneVoiceICT

1.1.2 Funciones y servicios de accesibilidad

El menú de accesibilidad de Android está en "Ajustes" y difiere por marca y gama del dispositivo. En los de gama alta suele aparecer dividido por tipo de discapacidad o interacción (Visión, Audición, Destrezas e Interacción).

Puede haber otras funciones útiles para las personas con discapacidad que no se encuentren en el menú de accesibilidad. Por ejemplo, las opciones "Modo Sencillo" o "Enviar Mensajes SOS" de Samsung están en el menú Pantalla y Llamada, respectivamente.

Las principales funciones de accesibilidad de Android organizadas por tipo de discapacidad son:

Discapacidad visual
  • Lector de pantalla: TalkBack o en Samsung Voice Assistant. El acceso mediante un lector de pantalla se basa en la verbalización del contenido que hay en pantalla y en una serie de gestos que nos permiten interactuar. Por ejemplo en TalkBack tenemos gestos como:
    • deslizar de derecha a izquierda y viceversa para ir al contenido anterior o posterior;
    • pulsar dos veces para seleccionar;
    • deslizar abajo y derecha para sacar el menú global, donde está por ejemplo la opción de leer desde arriba;
    • deslizar arriba y derecha para sacar el menú local;
    • deslizar abajo y a la izquierda para volver atrás;
    • etc.
  • BrailleBack: permite conectar una línea braille al dispositivo y, junto con TalkBack, combinar la salida de voz y la salida/introducción de información en Braille.
  • Escuchar Selección: al activar esta opción te aparece un icono en pantalla, abajo a la derecha, que al pulsarlo te leerá en voz alta los elementos que selecciones.
  • Relacionados con el zoom o la configuración del tamaño:
    • Gestos de magnificación: permite ampliar el contenido de la pantalla a través de gestos táctiles.
    • Lupa: es una ventana virtual que agranda solo una zona.
    • Texto grande: amplia el tamaño de texto; en el menú Pantalla también se puede modificar el tamaño de texto con más opciones.
    • Zoom y fuente de pantalla
  • Relacionados con el color:
    • Texto de alto contraste: los textos tienen un borde negro.
    • Teclado de alto contraste: el teclado virtual aparece en colores de alto contraste.
    • Mostrar formas de botones: muestra los botones con el fondo sombreado para resaltarlos.
    • Invertir colores (o Colores negativos) como el negativo fotográfico.
    • Corrección del color: para compensar el daltonismo.
    • Escala de grises
Discapacidad auditiva
  • Sonido monoaural: la salida estéreo por distintos canales puede suponer para algunos usuarios pérdida de información.
  • Subtítulos: esta opción te permite activar y configurar los subtítulos en el dispositivo.
  • Notificación de parpadeo: la luz de la cámara parpadea para indicar que se han recibido notificaciones o que la alarma está sonando; también hay opción de alertas visibles y vibratorias, que informa al usuario de las alertas y mensajes a través de luces y vibración.
  • Videollamada: aunque no forma parte del menú de accesibilidad es muy útil para las personas cuya lengua materna es la lengua de signos.
  • Compatibilidad con audífonos o implantes cocleares.
Discapacidad motriz y cognitiva
  • Voice Access (en beta), Google Now, Google Assistant: permiten el control por voz o el reconocimiento de voz.
  • Switch Access ("Accesibilidad mediante interruptores" en español): es una opción que permite ir accediendo a cada uno de los elementos de pantalla linealmente mediante toques de un interruptor, bien un botón físico del teléfono o un pulsador externo. A medida que los elementos cogen el foco quedan resaltados.
  • Dictado por voz: permite al usuario realizar entrada de texto a través de voz.
  • Menú de asistencia (Touch Assistant): permite reproducir las funciones de los botones físicos del dispositivo. Aparece un icono flotante que despliega un menú alternativo para hacer con un clic funciones como, por ejemplo, una captura de pantalla.
  • Texto predictivo en los campos de introducción de texto.
  • Conexión de un teclado externo u otro dispositivo de entrada.
  • Modo sencillo: opción que permite simplificar la pantalla de inicio e incluye además los iconos más grandes. No está en el menú de accesibilidad sino en el menú Pantalla.

Recursos que te serán de utilidad

1.2 Texto alternativo al contenido no textual  (android:contentDescription)

Para que el lector de pantalla anuncie correctamente una imagen, debemos incluir en la misma una descripción que comunique su función o la información que transmite.

En HTML lo hacemos con el atributo ALT, en una app nativa de Android lo hacemos con el atributo android:contentDescription.

<ImageButton
   …
   android:contentDescription= "@string/share"
   android:src="@drawable/ic_share" />

Debemos incluir android:contentDescription especialmente en: ImageButton, ImageView y también en CheckBox.

También podemos asociar la descripción con el método setContentDescription(). Esto es muy útil, por ejemplo, si cambias la imagen dinámicamente, como en el caso de un botón de reproducción que se convierte en botón de pausa.

private void  updateImageButton() {
  if (mediaCurrentlyPlaying) {
     playPauseImageView.setImageResource(R.drawable.ic_pause);
     playPauseImageView.setContentDescription(getString(R.string.pause));
  } else {
     playPauseImageView.setImageResource(R.drawable.ic_play);
     playPauseImageView.setContentDescription(getString(R.string.play));
  }
}

- Ejemplo de "Making Apps More Accessible", Android Developers, "Accessibility"

Igual que en HTML dejamos el ALT vacío (alt="") cuando la imagen es decorativa para que sea ignorada por el lector de pantalla, en Android utilizamos para el mismo propósito android:contentDescription="@null"

Recuerda que la descripción de la imagen no debe comenzar con "imagen", "icono" u otra palabra similar. En la descripción de una casilla de verificación tampoco indiques su estado ("marcado" o "no marcado") pues el lector ya nos anuncia qué tipo de contenido es o su estado. 

1.3 Etiquetas de formularios

1.3.1 android:labelFor

Los campos de formulario deberían tener una etiqueta visible. La etiqueta debería asociarse al campo mediante android:labelFor, de una manera muy similar a cómo se hace en HTML:

<LinearLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:orientation="vertical">
       <TextView
            …
            android:labelFor= "@+id/edit_text_email"
            android:text="Email"  />
       <EditText
            …
            android:id= "@+id/edit_text_email"
            android:hint= "miemail@gmail.com" />
</LinearLayout>

- Ejemplo de Android Accessibility-

Las etiquetas deben ser claras, concisas y únicas en cada ventana.

1.3.2 android:hint

El atributo android:hint que observamos en el ejemplo anterior es como el placeholder de HTML, es decir, el atributo con el que definimos el texto que aparece por defecto dentro del campo.

android:hint debería utilizarse solo para incluir información que ayude a rellenar el campo. No debe usarse para etiquetar el campo, a no ser que no se pueda usar android:labelFor (API +17) o que el campo no pueda tener una etiqueta visible.

La razón por la cual no debería usarse android:hint para etiquetar el campo es que, una vez que rellenamos el campo, ya no sabemos qué dato se pedía.

Con el lector de pantalla pasa lo mismo, una vez rellenado el campo, Talkback ya no anuncia el contenido del android:hint, solo anuncia el texto escrito dentro del campo.

Además, los textos incluidos por defecto dentro de los campos suelen tener problemas de contraste, pues se les da un color de texto muy claro para diferenciar el texto inicial del dato real insertado.

1.3.3 android:contentDescription

No deberías incluir el atributo android:contentDescription en los campos de formulario.

Definir un android:contentDescription en un EditText o TextView puede interferir con la capacidad de un servicio de accesibilidad para describir, navegar y también interaccionar con el texto que un usuario ingresa en el elemento.

1.3.4 Label flotante. TextInputLayout

Hemos indicado que la etiqueta del campo no debería estar dentro del mismo.

Lo que se implementa en algunos casos es que, una vez que empiezas a escribir, la etiqueta que está definida como android:hint se muestre como un label flotante sobre el campo. De este modo no perdemos el contexto de la información que estamos ingresando.

Animación de un campo de texto. La etiqueta Apellido está dentro del campo. Al escribir el apellido, la etiqueta se sitúa encima del campo.

- Animación de "Floating labels are problematic" de Adam Silver-

Este efecto se implementa con TextInputLayout:

<android.support.design.widget.TextInputLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content">
  <android.support.design.widget.TextInputEditText
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:hint="@string/form_username"/>
</android.support.design.widget.TextInputLayout>

- Ejemplo de "TextInputLayout" de Android Developers -

En el artículo "Floating labels are problematic" Adam Silver explica todos los inconvenientes que  tiene el uso de estas etiquetas flotantes. Sin embargo, por cada uno de estos problemas (tamaño, contraste, …) Matt D. Smith ofrece una solución de diseño en su artículo "Are Float Labels Really That Problematic After All?".

Aunque solucionáramos todos los problemas de diseño como nos indica Matt D. Smith, persistiría nuestro problema con el lector de pantalla: TalkBack no lee el atributo android:hint (aunque visualmente esté presente), solo leerá el texto introducido dentro del campo, y por tanto perdemos el contexto de la información que debemos introducir.

Ted de :last:children, en su artículo "Accessible Android Inputs with Material Design", propone solucionar este problema de la siguiente manera:

<android.support.design.widget.TextInputLayout 
  android:labelFor="@+id/username" 
  android:contentDescription= "@string/username_hint" 
  android:accessibilityLiveRegion= "polite"> 
  <EditText 
       android:id="@+id/username" 
       android:hint= "@string/username_hint" 
       …/> 
</android.support.design.widget.TextInputLayout>

La propuesta tiene algún bug, según la versión de Android. Por ello, Webaim propone otra solución que no da problemas:

<android.support.design.widget.TextInputLayout
    android:id="@+id/forms_email_text_input_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/layout_padding"
    android:labelFor="@+id/forms_email_edit_box"
    android:accessibilityLiveRegion="polite"
    android:hint="@string/edit_text_email_label"
    app:errorTextAppearance="@style/ErrorText"
    app:errorEnabled="true">

    <android.support.design.widget.TextInputEditText
        android:id="@+id/forms_email_edit_box"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"/>
</android.support.design.widget.TextInputLayout>

1.3.5 Otras consideraciones

Otras consideraciones relacionadas con los formularios son:

  • Facilita completar el formulario:
    • con la preselección de valores por defecto;
    • con la opción de autocompletado (AutoCompleteTextView);
    • sin interferir en la función corta/pega del sistema.
  • Identifica los campos obligatorios o que requieren formatos obligatorios.
  • Da información precisa sobre los errores.
  • Todo control que permite introducir información debe ser compatible con el mecanismo de dictado por voz de la plataforma. Esta función es de gran ayuda para las personas que tienen un ritmo más lento de escritura y para las personas a las que les resulta imposible introducir texto por teclado o pantalla táctil. Sin embargo, recuerda que la entrada por voz no puede ser el único método de entrada.

1.4 Notificaciones (android:accessibilityLiveRegion)

Las notificaciones (de validación de formulario o cualquier otra) deben ser percibidas por todos los usuarios, para ello es importante que no ofrezcas la información por un solo canal.

La información que se ofrece por un canal (visual, sonoro o háptico) debe ser redundante también en otro canal:

  • Las notificaciones debe ser anunciadas por el lector de pantalla.
  • Los vídeos deben tener subtítulos y audiodescripción.
  • Si ofreces una señal visual (un destello, un cambio de color, etc.) para indicar, por ejemplo, un cambio de estado o una notificación, debes ofrecer esa información también por otro canal, por ejemplo, una vibración y/o un pitido.
  • Si ofreces información por el canal auditivo, como un pitido, debe estar acompañada por un alternativa en el canal visual y/o háptico.
  • Si ofreces información por el canal háptico, como una vibración, debe estar acompañada por un alternativa en el canal sonoro  y/o visual.

Para que el contenido que cambia o aparece en pantalla sea anunciado por el lector de pantalla, usamos android:accessibilityLiveRegion. Hemos visto un ejemplo en el apartado anterior (1.3.4), al hablar de las etiquetas flotantes.

Es similar al atributo aria-live que usamos en HTML, y tiene los mismos valores: none, polite, assertive. Debería usarse assertive solo para notificaciones realmente importantes, ya que el lector de pantalla interrumpirá la lectura para anunciarlas. Resulta muy molesto que el lector anuncie determinados cambios, como por ejemplo los de un banner publicitario.

Ten en cuenta que:

  • si es un error de validación de formulario que muestras escrito, puedes necesitar mover allí el foco (requestFocus()).
  • si usas AlertDialog para mostrar mensajes de error, estos y sus funciones asociadas ya serán accesibles.
  • si usas una ventana modal, utiliza ListPopupWindow o PopupWindow, y setModal(true), para que solo el contenido de la ventana modal sea enfocable por TalkBack.
  • puedes hacer que TalkBack diga algo con View.announceForAccessibility("[el mensaje que quieres que diga]");. También hay métodos para detectar qué servicios de accesibilidad, como TalkBack, están activos en el dispositivo.

1.5 Foco y agrupaciones de elementos

1.5.1 Foco de navegación y foco de accesibilidad

No es lo mismo el foco de navegación que el foco de accesibilidad.

El foco de navegación es el foco por las vistas que requieren el input del usuario (botones, enlaces, campos de formulario), es decir, si tienes conectado un teclado, todos los elementos interactivos que cogerían el foco con el tabulador.

El foco de accesibilidad (o "traversal") es el foco de los lectores de pantalla, es decir, todos los elementos que cogerán el foco cuando hagas flicks (deslizamientos de izquierda a derecha, o al revés, para avanzar o retroceder de elemento). En este caso, el foco no lo cogen solo los elementos clicables o con los que puedes interactuar, sino también otros, como las imágenes, los textos, etc.

Para controlar que una vista recibe el foco de navegación se usa android:focusable, que para entendernos sería como el tabindex en HTML. Tenemos también los métodos relacionados: setFocusable(), requestFocus(), isFocusabled())

El foco tiene que seguir un orden natural, de izquierda a derecha y de arriba abajo, normalmente acorde con el orden visual. El foco de navegación se modifica con android:nextFocusForward, android:nextFocusDown; android:nextFocusLeft, android:nextFocusUp y android:nextFocusRight.

<LinearLayout
  …>
  <EditText
       android:id="@+id/edit"
       android:nextFocusDown= "@+id/text"
       … />
  <TextView
       android:id="@+id/text"
       android:focusable="true"
       android:text="este  texto coge el foco"
       android:nextFocusUp="@id/edit"
  … />
</LinearLayout>

Desde API+22 contamos con la posibilidad de modificar el foco de accesibilidad con: android:accessibilityTraversalAfter y android:accessibilityTraversalBefore.

Ten en cuenta que aquellos elementos que son decorativos no deberían coger el foco.

1.5.2 Agrupar los elementos para controlar la granularidad del foco (android:focusable)

Podemos usar android:focusable para controlar la granularidad del foco, organizando el contenido relacionado en grupos, de tal manera que se anuncien reflejando sus agrupaciones naturales. De esta manera el usuario de lector de pantalla no necesitará hacer tantos flicks ni esperar tanto para encontrar la información deseada.

Imaginemos una lista de canciones y autores. En vez de que cada flick llegue por separado a la canción o el autor, podemos hacer que TalkBack nos los lea como una unidad:

<RelativeLayout
  android:id="@+id/song_data_container"
  …
  android:focusable="true">
  <TextView
       android:id="@+id/song_title"
       …
       android:text= "@string/song_title"  />
  <TextView
       android:id="@+id/singer"
       …
       android:text="@string/singer" />
…
</RelativeLayout>

- Ejemplo de "Accessibility", Android Developers -

Cuando tenemos grupos pequeños o simples de contenido es una buena idea tratarlos como una unidad de información, agrupándolos como en el ejemplo anterior en un contenedor enfocable.

El agrupamiento reduce la cantidad de flicks del usuario y optimiza la salida de voz. Pero hay que encontrar un equilibrio, sino leerá demasiada información de golpe.

En Android Developers se incluyen otros casos, por ejemplo aplicados a la tablas, en las que puedes asignar el foco a una fila para que la lea como una unidad. Si no incluyes android:focusable="true", cada flick leerá una celda; pero si las agrupas, leerá seguido el contenido de toda la fila, por ejemplo producto y precio.

<LinearLayout
     ...
     orientation="vertical">
     <RelativeLayout
          ...
          android:focusable="true">
          <TextView ... />
          <TextView ... />
     </RelativeLayout>
     <RelativeLayout
          ...
          android:focusable="true">
          <TextView ... />
          <TextView ... />
     </RelativeLayout>
     <RelativeLayout
          ...
          android:focusable="true">
          <TextView ... />
          <TextView ... />
     </RelativeLayout>
</LinearLayout> 

- Ejemplo de "Accessibility", Android Developers -

Si alguna vez nos encontramos con listas (RecyclerView) que no se verbalizan correctamente, en las que TalkBack intenta vocalizar la lista entera, usar focusable="true" forzará a leer los elementos uno a uno.

1.5.3 Grupos accionables lógicos (android:clicable)

En una aplicación sueles tener grupos de elementos accionables, como un icono y su texto. Si tienes un item no accionable y no tiene predecesores accionables, TalkBack solo lo leerá si le das el foco.

En el siguiente ejemplo tenemos un item accionable huérfano que, aunque visualmente será un gran botón, al acceder con TalkBack será en realidad dos elementos.

<FrameLayout
      … >
      <View  android:clicable="true"/>
      <TextView  android:text="Aceptar"/>
      <ImageView  android:src="@drawable/image"/>
</FrameLayout>

- ejemplo incorrecto -

Sin embargo, si haces clicable el FrameLayout tendrás un único grupo accionable y como tal será anunciado por el lector de pantalla:

<FrameLayout
     android:clicable="true"
     … >
     <TextView  android:text="Aceptar"/>
     <ImageView  android:src="@drawable/image"
     ...
     />
</FrameLayout>
  

- ejemplo correcto -

El siguiente es un ejemplo de algo que NO debe hacerse:

<LinearLayout 
     android:clicable="true"  
     …>
     <Button
        android:id="@+id/button1"
        android:text="Aceptar"
        ... />
</LinearLayout>

- ejemplo incorrecto -

En este ejemplo tenemos dos elementos clicables en la jerarquía, el botón y su padre, lo cual crea confusión y dificulta, por ejemplo, el acceso con Switch Access.

1.5.4 android:importantForAccessibility

Tenemos este atributo desde API16. Es como una aria-hidden pero al revés: si es ="no" será ignorado por el lector de pantalla.

En el siguiente ejemplo se usa para definir una imagen como decorativa:

<ImageView
    android:importantForAccessibility="no"
    … />

Con android:importantForAccessibility="yes" puedes forzar a que un elemento sea expuesto a TalkBack y por tanto reciba el foco de accesibilidad.

El valor por defecto es "auto", en cuyo caso es el sistema quien decide: un Button será por defecto ="yes" y un LinearLayout por defecto será ="no".

También admite el valor "NoHideDescendants", en este caso indicas que ni la vista ni sus hijos son importantes para la accesibilidad. Esto oculta todos los elementos de una vista a la vez y es muy útil en elementos personalizados.

1.6 Tamaño de los elementos

Es importante que los controles de la interfaz tengan un tamaño adecuado para una interacción táctil, especialmente para las personas con problemas motores o de visión.

En Android se recomienda un tamaño mínimo de 48x48dp.

<ImageButton
     ...
     android:minWidth="48dp"
     android:minHeight="48dp" />

To ensure balanced information density and usability, touch targets should be at least 48 x 48 dp. In most cases, there should be 8dp or more space between them.

Size elements at least 48dp high and wide to ensure a physical size of about 9mm regardless of screen size. The recommended target size for touchscreen objects is 7-10mm.

Un icono de 40 por 40 píxeles con un área clicable de 48x48. Otro icono de 24x24 con un área clicable de 48 por 48 píxeles.

- En Google, Material Design. Accessibility -

Como se observa, el tamaño hace referencia no a la imagen en sí, sino al área en la que se puede clicar. Se puede usar un icono más pequeño pero con un padding que asegure un área clicable del tamaño adecuado.

También se puede ampliar el área clicable con TouchDelegate (ver ejemplo: "Android change touch area of View by TouchDelegate", Mohit Sharma)

Las WCAG 2.1 incluirán un nuevo criterio que obliga a que los elementos de interacción tengan un tamaño mínimo de 44x44px CSS. Sin embargo, animan a que tengan un tamaño mayor, especialmente sin son relevantes, se usan con frecuencia o son difíciles de alcanzar. Ten en cuenta que muchos usuarios, especialmente los más jóvenes, interactúan con el pulgar que es más ancho.

Un dedo índice abarca 57 píxeles. Un pulgar 72 píxeles.

- Anchuras medias del índice y el pulgar -

En otras referencias podemos encontrar los tamaños expresados en mm, por ejemplo, en la "Metodología para Evaluar la Accesibilidad de Aplicaciones Nativas" de Ilunion, donde el tamaño mínimo son 35 mm2 y la separación mínima 2 mm.

1.7 Tamaño del texto

El tamaño del texto se indica con android:textSize. El tamaño de la fuente se puede especificar en dp, sp, pt, px, mm o in.

La diferencia entre dp (density-independent pixels) y sp (scale-independent pixels) es que la fuente definida con sp escala según el tamaño de fuente especificado por el usuario, que hemos visto que puede modificarlo en los ajustes de accesibilidad del sistema.

Por tanto, la unidad de medida que debemos usar es sp.

<TextView 
     android:id="@+id/textView4" 
     android:layout_width= "wrap_content" 
     android:layout_height= "wrap_content" 
     android:text="Ejemplo" 
     android:textSize="26sp" /> 

Android también tiene unos estilos con un tamaño de fuente predefinido: Small: 14sp; Medium: 18sp; Large: 22sp. Estos también pueden usarse porque respetarán las preferencias del usuario:

<TextView 
     android:id="@+id/textView1" 
     style= "@android:style/TextAppearance.Small" 
     android:layout_width= "wrap_content" 
     android:layout_height= "wrap_content"
     android:text="Sample  Text - Small" />  
  <TextView 
     android:id="@+id/textView2" 
     style= "@android:style/TextAppearance.Medium"  
     android:layout_width= "wrap_content" 
     android:layout_height= "wrap_content" 
    android:text="Sample  Text  - Medium" /> 
  <TextView 
     android:id="@+id/textView3" 
     style= "@android:style/TextAppearance.Large" 
     android:layout_width= "wrap_content" 
     android:layout_height= "wrap_content" 
    android:text="Sample  Text  - Large" /> 

Igual que en HTML tenemos CSS, en Android se tienen temas y estilos para conseguir un estilo homogéneo y coherente para toda la app. Puedes personalizar estos tamaños por defecto como explica muy bien Juan Ardissone en el artículo Android – Styles & Themes

El tamaño mínimo legible es de 12sp, que debería evitarse o dejarse para texto insignificante. Se debería usar como mínimo 14sp.

El texto por defecto de la app debería ser igual o superior al tamaño por defecto del sistema, siempre que la tipografía utilizada sea similar a la tipografía por defecto.

La tipografía estándar en Android es Roboto:

Texto con tipografía roboto con diferente tamaño y estilo.

- Tipografía Roboto -

Puedes consultar todas las características de Roboto en "Typography" Material Design. Accessibility, Google.

Además de tener en cuenta que el tamaño de la app debe ser legible y debe crecer según las preferencias del usuario, comprueba con el tamaño de fuente grande que:

  • los interlineados y la distancia entre párrafos siguen siendo los adecuados para que el texto sea legible. El interlineado debe ser al menos 1,5 el tamaño de fuente; y la distancia entre párrafos al menos 1,5 mayor que el interlineado.
  • el texto cabe en su contenedor sin que quede cortado.
En la siguiente app, con una configuración del sistema de texto grande, el texto de los botones naranjas queda cortado.

App Ortodoncis con tamaño de texto grande. Hay tres botones cuyo texto queda cortado.

- Error: texto grande que no cabe en su contenedor -

En la app de LinkedIn, con una configuración del sistema de texto grande, se observa que en el primer item de contenido la distancia entre párrafos es insuficiente y el texto queda superpuesto:

App LinkedIn con texto grande. Dos párrafos están tan juntos verticalmente que se superponen.

- Error: interlineado incorrecto con texto grande -

También deberías tener en cuenta que, si el contenedor podría albergar el texto en otro idioma, quepa también en dicho idioma.

Por último, evita las imágenes de texto, cuyo texto el usuario no podrá personalizar según sus preferencias.

1.8 Color

El color del texto (android:textColor) debe tener suficiente contraste con el color del fondo (android:background). Este es también un requisito importante en web, y quizás más en móvil, no solo para las personas con problemas visuales, cognitivos o de lectura, también para la mayoría de nosotros. En el móvil solemos tener reflejos o solemos configurar el brillo bajo para ahorrar batería.

El ratio de contraste mínimo, según las WCAG 2.0, debería ser:

  • texto pequeño (equivalente a menos de 18pt o 14pt en negrita): ratio 4,5:1 en el nivel AA y 7:1 en el nivel AAA;
  • texto grande: ratio 3:1 en el nivel AA y 4,5:1 en el nivel AAA.

La metodología para evaluar apps de Ilunion es muy concreta en cuanto a la evaluación del contraste en base al tamaño y la tipografía, y creo que sería muy recomendable seguir sus especificaciones (consultar " Metodología para Evaluar la Accesibilidad de Aplicaciones Nativas" (PDF) de Ilunion", 1.4.3 Contraste de color)

También es importante no transmitir información solo con el color:

Incorrecto

App con un listado de diagnósticos realizados al módem. Unos tienen al lado un icono redondo rojo y otros un icono redondo verde.

- Información que se transmite solo con el color -

En el ejemplo anterior, si alguien no puede distinguir el color de los círculos, no podrá saber el estado de los componentes. Se podría haber usado, de forma complementaria al color, iconos con formas diferentes (círculo verde y cuadrado rojo) con una leyenda.

Correcto

App con listado de estacionamientos. Unos tienen un cuadrado gris con el texto 'cerrado'; y otros un cuadrado amarillo con el texto 'casi lleno'.

- Información que NO se transmite solo por el color -

En este otro ejemplo, aunque no podamos distinguir el amarillo del gris, se ofrece complementariamente un texto que nos indica el estado del parking. Ahora ya solo sería necesario que ese texto cumpliera con el contraste de color.

Hemos comentado al inicio que en Android tenemos distintas opciones relacionadas con el color en el menú de Accesibilidad, como Invertir colores o Texto de alto contraste.

No es necesario que ofrezcamos este tipo de opciones en nuestra aplicación. Lo que sí es importante es no interferir con ellas y comprobar que funcionan correctamente en nuestra app, que todo el contenido textual se presenta siguiendo las personalizaciones de color del usuario.

1.9 Alternativas para el canal de entrada

Las personas con discapacidad motora es probable que:

  • no puedan realizar determinados movimientos,
  • no puedan realizarlos con precisión,
  • no puedan aplicar fuerza,
  • no pueda realizar varios gestos simultáneos.

Por ello, la interacción debe ser sencilla o dar una alternativa a los gestos complejos multitáctiles. Tampoco deben colisionar con los gestos predefinidos de los producto de apoyo como TalkBack.

Las WCAG 2.1 incluirán un nuevo criterio que hace referencia también a este requisito (ver "WCAG 2.1, medida provisional hasta las WCAG 3.0", 2.5.1 Pointer Gestures).

Por otro lado, tampoco puedes presuponer que los usuarios utilizarán un método de entrada concreto, así que evita dar instrucciones del tipo "Toca dos veces", sino otras más abstractas, como "Activa el elemento".

1.10 Rol, nombre, valor y estado. Custom Views

Nuestra app y un producto de apoyo como es el lector de pantalla TalkBack se comunican a través de la API de accesibilidad.

El usuario interactúa con la app através de la API de accesibilidad.

- Esquema de interacción con la API de accesibilidad -

La app informa del evento que ha ocurrido, el objeto que lo ha causado y sus propiedades. Por tanto, las acciones de los usuarios y las propiedades de nuestros componentes son expuestas a la API de accesibilidad y a través de esta al producto de apoyo, que a su vez trasladará la información al usuario.

Por cada componente anunciará:

  • Rol, es decir, qué tipo de componente es: un botón, un texto, …
  • Nombre, etiqueta o contenido textual, como hemos visto por ejemplo en el apartado sobre cómo etiquetar imágenes o sobre cómo etiquetar campos de formulario.
  • Estado, es decir, en qué situación se encuentra gracias siempre a sus propiedades, no a su aspecto visual: marcado (android:checked="true"), deshabilitado (android:enabled="false"), etc.
  • Valor, como el texto que contiene un campo de texto.

De esta forma, solo por utilizar un componente estándar e indicar sus propiedades, apenas tendremos que hacer nada más, será accesible sin ningún esfuerzo adicional. Solo tendremos que asegurarnos de que está correctamente etiquetado, porque ya expondrá correctamente su rol, etiqueta, estado y valor.

Android ofrece un completo modelo de componentes para construir la interfaz, basado en las clases View y ViewGroup, para las que la plataforma incluye gran variedad de subclases:

  • widgets en el caso de View: Button, TextView, EditText, etc.
  • layouts en el caso de ViewGroup: LinearLayout, FrameLayout, etc.

Se pueden consultar todos con un ejemplo en Standard Controls, Xamarin.

Úsalos siempre que puedas.

Cabe en este punto indicar que la clase WebView, que permite visualizar páginas web, es un tanto especial. En este caso tendremos que: permitir el JavaScript (mWebView.getSettings.setJavaScriptEnabled(true);) y asegurarnos de que la página que se muestra sea accesible (cumpla con las WCAG 2.0).

Si en HTML quisiéramos simular que una imagen es un checkbox, podríamos hacerlo (no digo que deberíamos) y podríamos hacerlo accesible: incluiríamos tabindex="0" para que cogiera el foco; le pondríamos role="checkbox" para que fuera anunciado como un checkbox; le añadiríamos un aria-label  para etiquetarlo; le pondríamos aria-checked="true" para que anunciara que está seleccionado; controlaríamos los eventos para cambiar su estado dinámicamente cada vez que el usuario lo pulsará en el acceso con ratón y con teclado, etc.

Mucho trabajo pero posible.

En Android ocurre lo mismo. Si creas componentes personalizados tendrás que definir manualmente toda la información y funcionalidad que lo haga accesible.

Puedes consultar la guía de cómo lograr construir Custom Views accesibles paso a paso en:
Building Accessible Custom Views, Android Developers,

Las principales tareas que incluye son:

  1. Handling directional controller clicks
  2. Implementing accessibility API methods
  3. Sending accessibility events
  4. Populating accessibility events
  5. Providing a customized accessibility context
  6. Handling custom touch events

Las principales clases que se utilizan son: AccessibilityEvent, AccessibilityNodeInfo, AccessibilityNodeInfoCompat, View.AccessibilityDelegate, AccessibilityDelegateCompat, ExploreByTouchHelper

Otra cosa diferentes es el tema de implementar tu propio servicio de accesibilidad.

A finales de año (2017) hubo mucho revuelo porque Google amenazó con eliminar de Google Play todas las apps que solicitaban permisos de accesibilidad para tareas que no tenían nada que ver con la accesibilidad. De momento, a día de hoy, solo se pide que añadan una descripción al servicio de accesibilidad para explicar por qué lo necesitan.

Los servicios de accesibilidad se encuentran en Ajustes > Accesibilidad. Por defecto tendrás TalkBack, Accesibilidad mediante interruptores, etc. pero también los de otras apps que te hayas instalado, pues se pueden crear y distribuir servicios propios.

Por ejemplo, Voice Access o  Accessibility Scanner (que reseñé en Accessibility Scanner, evaluar la accesibilidad de una app de Android) se instalan como un servicio de accesibilidad. Por ejemplo, el antivirus AVG instala un servicio de accesibilidad que permite alertar de las amenazas con una alarma sonora.

Para saber cómo construir tu propio servicio de accesibilidad se puede consultar Building Accessibility Services, Android

1.11 Fácil y consistente

Las personas con una discapacidad cognitiva pueden tener mayor dificultad para comprender o aprender el funcionamiento de tu app, pero todos vamos a agradecer que:

  • sea simple, clara, intuitiva y consistente;
  • no tenga términos enrevesados o instrucciones complejas;
  • no tenga navegaciones excesivamente largas y retorcidas;
  • se sepa siempre en qué vista estás y cómo desplazarte a la vista que deseas alcanzar;
  • se resalten los elementos más importantes;
  • tener que desplazarse lo menos posible para completar cada acción.

Una buena práctica es seguir las guías de estilo de cada plataforma para que el aspecto sea homogéneo con el resto del sistema operativo y la curva de aprendizaje sea mínimo.

Aquí también podríamos hablar del título, que es leído por TalkBack, y que se define en AndroidManifest.xml mediante android:label.

1.12 Principales errores

En la página "Valoración de accesibilidad de Apps" del Centro de Investigación, Desarrollo y Aplicación Tiflotécnica (CIDAT) se pueden consultar revisiones de accesibilidad de diversas apps. Si lees unas cuantas, podrás concluir que al final los errores son recurrentes y que están relacionados con el incumplimiento de las buenas prácticas que hemos repasado:

  • Elementos sin etiquetar o etiquetados incorrectamente.
  • Elementos que no son visualizados en pantalla pero son verbalizados por Talkback.
  • Advertencias que no son verbalizadas de forma automática.
  • Banners que se verbalizan continuamente.
  • Botones, enlaces, pestañas, etc. que no se identifican como tales y que TalkBack anuncia como texto, sin que el usuario sea consciente de que son activables o de qué tienen una función.
  • Problemas de contraste de color.
  • Texto que, con la configuración de texto grande del sistema, se queda cortado dentro de su contenedor.
  • Problemas con el foco.
  • Listas inaccesibles.
  • Mapas inaccesibles.
  • Incorrecta agrupación de los elementos con una misma función, por ejemplo una imagen y dos líneas de texto que no son verbalizados como un enlace único sino como tres.
  • No se anuncia el cambio de estado de los elementos.
  • Problemas con los selectores de fecha y hora.
  • Elementos a los que no se puede acceder mediante TalkBack con flicks (deslizamiento de izquierda a derecha o al revés, para avanzar o retroceder de elemento), sino solo mediante la exploración táctil (deslizar el dedo por pantalla de tal manera que verbaliza lo que encuentra).

Parte 2. Aplicación de la norma EN 301 549 a las apps nativas de Android

Nota 09/2018:

En agosto de 2018 de actualizó la norma EN 301 549 para, por un lado, clarificar cómo se aplica a las páginas web y a las apps nativas para cumplir con la Directiva (UE) 2016/2102; y por otro, para equipararla a las WCAG 2.1, publicadas en junio de 2018.

A raíz de los cambios en la nueva versión de la norma, publiqué en septiembre un artículo específico sobre la aplicación de la EN 301 549 a las apps móviles, al que os remito directamente: Requisitos de accesibilidad de la EN 301 549 aplicables a las apps móviles nativas, obligatorios por ley a partir de 2021

Parte 3. Revisión y herramientas

A continuación incluyo un listado en orden alfabético de herramientas que pueden ser de utilidad para la revisión de la accesibilidad de la app.

Accessibility Checker [NetBeans IDE]

Es un plugin para el entorno de desarrollo NetBeans. Ofrece una lista con los errores y advertencias detectadas, así como información adicional para poder mejorar el producto final.

Pantalla de Attest Mobile. A la izquierda el resumen, a la derecha la descripción.

- Accessibility Checker [NetBeans IDE] (ver imagen más grande) -

Accessibility Scanner

Es un validador automático de accesibilidad para apps de Android que permite escanear cualquier aplicación que tengamos instalada en el móvil. Detecta problemas de contraste de color, elementos clicables demasiado pequeños, o elementos sin etiquetar.

La reseñé en el artículo Accessibility Scanner, evaluar la accesibilidad de una app de Android

AccessibilityService

Se ejecuta en segundo plano y devuelve información cuando se activan los eventos de accesibilidad. Es útil para el testeo manual.

Accessibility Test Framework

Esta API realiza diversas comprobaciones de accesibilidad.

Deque Universityfor Android

Esta no es una herramienta como las demás, no realiza validaciones. Es una app pensada para ayudarnos a comprender, mediante diferentes ejemplos, los problemas que encuentran los usuarios de TalkBack.

Espresso

Google liberó en 2013 Espresso, un framework para la automatización de pruebas funcionales. La API de Espresso está enfocada a utilizar el patrón ViewMatcher / ViewAction / ViewAssertion, que viene a ser una sintaxis en la que, utilizando el propio lenguaje, queda definida la acción a realizar sobre una vista/objeto y su correspondiente comprobación.

Tienes un ejemplo de cómo usarlo para comprobar las descripciones de los botones que se modifican dinámicamente en Accessibility Testing on Android de Kelly Shuster .

Espresso está muy bien explicado en “Espresso, haciendo pruebas funcionales en Android”, Guillermo Guerrero

forApp

Es un servicio en línea que comprueba automáticamente apps. Hay cientos evaluadas y puedes descargar los resultados. De momento es un servicio gratuito, en un futuro podrás analizar tu app. Las comprobaciones están relacionadas con las alternativas textuales o el foco.

Además, en cada informe se incluye una imagen con el orden del foco (en el siguiente pantallazo, en la columna izquierda).

Informe de forApp de la app MeowChat. Los tipos de error son: Alternative Text; Focus; Multi-touch. Por cada uno se indica el número de fallos, aciertos y advertencias, y una puntuación. En la columna izquierda un pantallazo de la app con números y flechas que indican el orden del foco .

- forApp. En la columna izquierda el orden del foco -

Lint

Integrada en Android Studio. Encuentra problemas como imágenes sin contentDescription o campos de formulario sin labelFor.

Un mensaje en Lint: Image without contentDescription.

- Lint. Imagen de Android Developers -

Node Tree Debugging

Se activa en la configuración de TalkBack y permite consultar el árbol de elementos tal y como se expone a la capa de accesibilidad. Consultar tutorial: Debugging Android Accessibility, de Midori Bowen

Robolectric

Es una librería de código abierto que permite ejecutar test en la propia máquina virtual de JAVA en vez de arrancar el emulador cada vez que ejecutamos el test.

Stetho

Se añade a las herramientas de desarrolladores de Chrome. Te conectas a la app y la depuras como si fuera una web.

UI Automator Viewer

Tiene un visor para inspeccionar la jerarquía de elementos tal y como se expone a la capa de accesibilidad y puedes crear pruebas basadas en determinada propiedad. UI Automator.

WorldSpace Attest

Es una app de Deque que, una vez instalada, aparecerá como un servicio más en Ajustes > Accesibilidad, y nos dará notificaciones de los problemas de accesibilidad detectados. De momento no está disponible para ser descargada desde España.

Se puede conectar con la aplicación escritorio para mostrar los resultados en el navegador:

Pantalla de Attest Mobile. A la izquierda el resumen, a la derecha la descripción.

- WorldSpace Attest -

Dos enlaces de interés:

Por último, no hay que olvidar que la forma más lógica y recomendable de testear, es no solo conociendo y activando las opciones de accesibilidad (TalkBack, Switch Access, etc.) o usando herramientas como las listadas, sino involucrando en las pruebas de revisión y calidad a usuarios con discapacidad.

Portada del libro Guia Aplicaciones moviles accesible. EN 301 549. Olga Carreras Montoto.

Aguía Aplicaciones móviles accesibles

Olga Carreras, 2023

Un guía divulgativa sobre la accesibilidad en aplicaciones móviles. Está dirigida a cualquier personas que quiera comprender qué es una aplicación móvil accesible y qué requisitos debe cumplir sin necesidad de tener conocimientos técnicos específicos.

En la guía explico todos los requisitos de la EN 301 549. También incluye un anexo con una lista de verificación.

Leer reseña

Descarga gratuita del libro "Guía Aplicaciones móviles accesible" en PDF accesible (10MB)

Referencias

* Imagen de portada original de Codelabs

Artículos relacionados