Cómo etiquetar imágenes y componentes visuales en Android con Content Description

En el desarrollo de aplicaciones para Android, la accesibilidad es un aspecto que no puede dejarse de lado. Uno de los errores más comunes en las interfaces de aplicaciones móviles es utilizar iconos o imágenes sin acompañarlos de una descripción accesible. Para los usuarios que dependen de TalkBack u otros lectores de pantalla, estos elementos pueden convertirse en barreras de accesibilidad muy severas si no cuentan con la información adecuada para identificar la funcionalidad de dichos botones o elementos visuales.

La propiedad contentDescription permite añadir una etiqueta textual a cualquier componente visual, de forma que TalkBack la anuncie en lugar de limitarse a leer un nombre técnico como “ic_send” o a ignorar la imagen por completo.

Ejemplo básico en XML

Un caso clásico es un botón con un icono de avión de papel que representa la acción de enviar un mensaje. Visualmente resulta evidente, pero sin descripción accesible no es comprensible para quien no puede ver la pantalla:

<ImageButton
android:id="@+id/sendButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_send"
android:contentDescription="Enviar mensaje"
/>

En este ejemplo, TalkBack leerá “Enviar mensaje” al situarse sobre el botón, en lugar de un nombre de archivo técnico.

Ejemplo con Jetpack Compose

En Compose, la accesibilidad se maneja mediante modificadores de semántica. El equivalente a contentDescription sería:

IconButton(
onClick = { /* Acción para enviar */ },
modifier = Modifier.semantics { contentDescription = "Enviar mensaje" }
) {
Icon(
imageVector = Icons.Default.Send,
contentDescription = null // Evitamos redundancia
)
}

En este ejemplo el botón anuncia la etiqueta “Enviar mensaje” al interactuar con TalkBack. El icono interno no necesita contentDescription porque ya se ha definido en el contenedor.

Buenas prácticas

La propiedad contentDescription es sencilla de usar, pero conviene aplicarla con criterio:

  1. Priorizar la función: un icono de engranaje para un botón para ir a los ajustes de la app no debería describirse como “rueda dentada”, sino como “Ajustes”, que es la acción real.
  2. Ser breve y claro: descripciones cortas facilitan la navegación. Un botón que abre un chat debe decir “Abrir chat”, no “Icono de burbuja de diálogo para iniciar conversación”.
  3. Evitar redundancias: si un TextView ya tiene texto visible, no es necesario repetirlo en contentDescription. TalkBack lo leerá automáticamente.
  4. Ocultar lo decorativo: para imágenes que solo son decorativas, se debe establecer android:contentDescription=»@null» en XML o contentDescription = null en Compose. De esta forma TalkBack las ignora.

Etiquetar adecuadamente los componentes visuales no solo es una buena práctica de desarrollo, sino un compromiso con la inclusión digital. Al igual que ocurre con cualquier aspecto del diseño, dedicar unos segundos a escribir una descripción accesible marca la diferencia entre una app usable y otra que excluye a parte de sus usuarios. La propiedad contentDescription es una de las herramientas más simples y a la vez más poderosas que Android pone en manos de los desarrolladores para mejorar la accesibilidad. Añadir una descripción clara y precisa a imágenes e iconos garantiza que los usuarios con lectores de pantalla comprendan e interactúen con la interfaz en igualdad de condiciones.

Cómo utilizar la app Notas en macOS

La aplicación Notas de macOS, en sus últimas versiones, se ha convertido en una herramienta muy versátil para estudiantes, profesionales y cualquier persona que necesite organizar ideas, proyectos o documentos de forma ordenada y productiva.

Organizar las notas

Una buena organización es clave para que Notas se convierta en un cuaderno de ingeniero o gestor documental. Para ello lo primero es organizar las notas en carpetas. Tanto las cuentas de iCloud como Gmail o Microsoft Exchange permiten crear notas organizadas por carpetas.

En el menú Archivo de la barra de menú hay opciones para crear notas y carpetas. Además, podemos abrir el menú contextual de una carpeta en la lista de carpetas y realizar operaciones como renombrar o eliminar la carpeta, cambiar el sistema de ordenación o crear carpetas inteligentes.

Para una mejor accesibilidad y visibilidad es recomendable utilizar la opción Como lista del menú visualización. Esto facilita la navegación para los usuarios de VoiceOver y Zoom. Podemos activar esta opción pulsando Comando+1.

Junto a la lista de carpetas está la lista de notas. Podemos saltar entre ellas pulsando VO+J con VoiceOver.

Para tener una mejor visibilidad de las notas a la hora de navegar por esta lista es muy recomendable que todas las notas tengan un título en la primera línea del cuerpo de la nota. Es recomendable que el título refleje el concepto que describe e incluya, por ejemplo, la categoría de conocimientos a la que pertenece. Por ejemplo: una nota sobre la accesibilidad de los estilos CSS y el color podría tener un estilo como Web – Accesibilidad – CSS – Estilos para el color.

También podemos incluir etiquetas utilizando el carácter almohadilla (#). Todo esto beneficiará las operaciones de búsqueda de información dentro de la app de Notas.

Diferencias entre cuentas de correo electrónico

Es necesario indicar que sólo las cuentas de iCloud permitirán utilizar todos los estilos y funcionalidades para las notas. Si utilizamos una cuenta de Gmail o Exchange puede que no podamos formatear el texto o no podamos pegar ficheros o imágenes.

 Formatear texto en Notas

El formateo de texto permite dar estructura y claridad a las notas, facilitando la lectura y organización de la información. Además, esta información semántica en las notas permite que cuando copiemos a otro formato, como Pages o TextEdit, el aspecto visual y el marcado semántico permanecerá en la copia.

Para aplicar un formato a un bloque de texto primero debemos seleccionar el texto a formatear y luego podemos utilizar un atajo de teclado o abrir el menú Formato de la barra de menú.

Se pueden aplicar formatos simples como negrita (Comando+B), cursiva (Comando+I) o subrayado (Comando+U).

Visualmente se verán los cambios y los usuarios de VoiceOver tendrán información de los cambios de estilo cuando se muevan por el cuerpo de la nota utilizando las flechas de cursor.

Se pueden crear listas con viñetas, numeraciones o guiones. Pero uno de los aspectos más interesantes son los encabezados (Comando+Mayúscula+H) ya que cuando estamos sobre un encabezado podemos contraer el texto para visibilizar mejor la estructura. Los usuarios de VoiceOver pueden acceder a esta función pulsando VO+Comando+espacio y buscando la opción de Contraer o Expandir.

Además, en una nota, podemos pegar imágenes, ficheros de audio, documentos en formato PDF, Word o Pages, etc.

Buscar información

Si tenemos nuestras notas bien ordenadas y clasificadas la opción de búsqueda se vuelve muy poderosa ya que permite localizar contenido dentro de notas, títulos, adjuntos y etiquetas.

Realizar una búsqueda es sencillo: es necesario colocar el cursor en el campo de búsqueda en la lista de notas o pulsar Comando+Opción+F e introducir el texto a buscar. En la lista de notas se filtrarán las notas que contengan las palabras o etiquetas buscadas.

Un cuaderno de conocimientos sencillo y accesible

La app Notas va mucho más allá de una simple libreta digital. Sus funciones avanzadas la convierten en un excelente aliado tanto en el ámbito profesional como académico. Hay apps más especializadas como Obsidian o Notion, pero el nivel de accesibilidad de estas alternativas, en muchas ocasiones, no es suficiente para disfrutar de una experiencia productiva.

Nueva generación de herramientas automáticas de validación de la accesibilidad gracias a la inteligencia artificial

Las herramientas automáticas para la validación de barreras de accesibilidad, aunque conocidas sus limitaciones, son indispensables para las personas que diseñan y desarrollan interfaces digitales. Es conocido que la mayoría de estas barreras sólo pueden evaluar menos del 40% de los criterios de éxito de WCAG y que, en su evaluación, tampoco hay una precisión demasiado elevada.

La Inteligencia Artificial al rescate

Gracias a los últimos avances en la creación de modelos expertos con IA hay empresas como Evinced, que apuestan por el desarrollo de mejores herramientas, hoy podemos decir que tenemos a nuestra disposición la siguiente generación de las herramientas automáticas para la validación de la accesibilidad.

En algunos casos la mejora parece bastante evidente como sucede con Site scanner, una herramienta para analizar las barreras de accesibilidad en un sitio web de forma global ofreciendo resultados agrupados por componentes o incluso zonas que requieran de un usuario y contraseña. Lo interesante de esta herramienta es que, según sus creadores, pueden validar el 80% de los criterios de éxito y los resultados son más fiables. Por ejemplo, que una imagen tenga una cadena de texto ya no es suficiente para validar ese criterio de éxito, la descripción también debe ser algo comprensible y no el nombre del fichero del archivo de imagen.

Otra diferencia importante es que pueden analizar el contenido y la funcionalidad del renderizado del DOM (Document Object Model) por lo que algunos problemas de accesibilidad no visibles para Wave o AXE debido al uso de ReactJS o Angular si son detectados por esta nueva generación de herramientas.

La accesibilidad no sólo es Web

Las Web Content Accessibility Guidelines (WCAG) también se aplican a las aplicaciones de los smartphones pero las herramientas de automatización de experiencias son pocas y casi ninguna incluye alguna herramienta de validación de la accesibilidad de forma fiable ya que, en muchos casos, el acceso al dispositivo móvil se realiza mediante capturas de pantalla, perdiendo el acceso a la capa semántica de las aplicaciones móviles.

  El Automation SDK de Evinced se integra con los tests automatizados de Selenium, Cypress, Playwright, XCUITest o Appium para dar ese extra para poder evaluar las posibles barreras de accesibilidad en una web o una app móvil.

Accesibilidad desde el diseño

Los diseñadores de contenidos o de experiencia de usuario, en muchos casos, utilizan aplicaciones como Figma para hacer ese diseño de experiencia de una web o una app móvil. Aunque este tipo de herramienta ofrecen algunos plugins relacionados con la accesibilidad, todos ellos son de ejecución manual y, cuando el frame de diseño de un proyecto es demasiado grande, hay muchas posibilidades de que haya componentes o flujos que se hayan quedado sin evaluar.

Con el plugin de Design Assistant para Figma se promete una evaluación automatizada de todos los elementos del proyecto y aplicando los evaluadores mejorados con IA se ofrece la detección y corrección de problemas de contraste de color, problemas de foco y zonas táctiles, flujos ARIA y otras validaciones de criterios de éxito de WCAG.

Además este plugin ofrece la posibilidad de incluir notas para los desarrolladores para que durante la implementación del diseño se incluyan las soluciones a las barreras de accesibilidad y ejemplos para diseñar tests unitarios.

Los desarrolladores también tienen más herramientas

Las herramientas de desarrollo de Google Chrome pueden mejorarse gracias a Debugger, una extensión para este navegador que usando IA mejora la detección de errores de contraste de color o de navegación por teclado y también mejora la detección de problemas con etiquetas de accesibilidad. Además proporciona ejemplos para solucionar los problemas detectados.

En el apartado para el CI/CD (Integración continua y distribución continua) Evinced ofrece Unit Tester, una herramienta automática para crear tests para la validación de criterios de éxito WCAG 2.1 nivel AA para problemas de roles, teclado y lectores de pantalla.

Se puede integrar de forma sencilla en los pipelines de Jenkins, Travis o CircleCI.

Conclusiones y realidades

Esta empresa ofrece otras herramientas para el apoyo de diseñadores, testers, desarrolladores y analistas. Todo enfocado en la detección y solución de barreras de accesibilidad.

Como con cualquier solución automática, no reemplaza la evaluación manual ni pruebas con usuarios reales con discapacidad. La experiencia final de un usuario es la única prueba que validará la accesibilidad al 100%. Estas herramientas ayudan a los profesionales a poder mejorar su trabajo y, de forma voluntaria o involuntaria, hacer que todo sea más accesible.

El desconocimiento de la accesibilidad es el primer problema que tiene el mundo de la accesibilidad digital. Muchos profesionales del diseño o el desarrollo usan sus herramientas de trabajo sin molestarse en comprender que hay elementos técnicos que se salen de su tecnología de trabajo. Gracias a estas herramientas esos profesionales tienen un contacto con la accesibilidad de forma más cómoda, guiada y no les exige un esfuerzo inicial de aprendizaje. Lo toman como algo a solucionar en su trabajo y siguen los consejos e indicaciones de la IA para solucionar ese problema de accesibilidad.

Estas herramientas siguen en desarrollo y están abiertas a mejora ya que todavía hay casos complejos de accesibilidad que la IA no sabe resolver. Además, por ahora, sólo se da soporte para contenidos en inglés.

Lo interesante de este conjunto de herramientas es que el enfoque se aplica a todos los sectores relacionados con un proyecto web o una app móvil. La responsabilidad de la accesibilidad no recae en un único profesional. Con estas herramientas todos los profesionales, desde el diseñador al desarrollador y el tester tienen contacto con la accesibilidad. Esto maximiza la posibilidad de que la mayor cantidad posible de barreras de accesibilidad sean detectadas y solucionadas antes de que el producto sea puesto a disposición de los usuarios. Un enfoque interesante y muy alineado con el concepto de que la accesibilidad debe aplicarse a todas las etapas de un proyecto.

Esperemos que pronto veamos que este tipo de herramientas automáticas mejoran el trabajo de muchos profesionales y facilitan que la accesibilidad sea parte real de los proyectos.

Tesis sobre accesibilidad a los videojuegos y audiodescripción

Se ha publicado la tesis doctoral La accesibilidad a los videojuegos: Estado actual y potencial de la audiodescripción para mejorar la experiencia de las personas con discapacidad visual, escrita por María Eugenia Larreina Morales y dirigida por la Dra. Carme Mangiron en la Universitat Autònoma de Barcelona.
Esta investigación representa un avance fundamental en el ámbito de la accesibilidad, centrándose en cómo la audiodescripción —una técnica tradicionalmente asociada al cine y la televisión— puede integrarse en los videojuegos para hacerlos más accesibles a las personas con discapacidad visual.

Entre los logros del trabajo destacan: un análisis del estado actual de la accesibilidad en los videojuegos más vendidos en España entre 2020 y 2024, un cuestionario con 106 participantes con discapacidad visual y 15 entrevistas en profundidad, la identificación de barreras comunes y oportunidades de mejora y la elaboración de 10 pautas concretas para mejorar la accesibilidad, tanto en contenido interactivo como no interactivo.

Conclusiones

Una de las conclusiones más relevantes es el alto interés de la comunidad de personas ciegas en utilizar audiodescripción durante las partidas (más del 80% de personas encuestadas). También se aborda cómo adaptar la audiodescripción a la naturaleza interactiva y dinámica del juego, proponiendo enfoques flexibles y técnicamente viables.

Recomendaciones dentro de la tesis

Algunas de las pautas que propone la tesis son:

  • Incluir la accesibilidad desde el inicio del desarrollo.
  • Implicar a personas con discapacidad en el proceso de diseño y testeo.
  • Aumentar la concienciación en la industria del videojuego.
  • Establecer estándares de calidad y legislación específica.

Acceso al documento

La tesis está disponible bajo una licencia Creative Commons y puede consultarse íntegramente en el repositorio de la Universitat Autònoma de Barcelona. Se puede descargar el documento de la tesis en formato PDF.

Code File Catcher: una herramienta para dar contexto a tus consultas a la IA

Muchas veces, cuando queremos pedir ayuda a una IA para depurar un fallo, revisar una estructura o mejorar un código, necesitamos enviar más que una simple función. Necesitamos compartir el contexto completo del proyecto: otros archivos, dependencias, configuraciones, etc.

Los entornos de desarrollo incluyen un navegador de archivos para moverte entre los distintos ficheros de un proyecto pero, en la mayoría de los casos, el navegador de archivos incluye alguna barrera de dificultad o la cantidad de ficheros es bastante grande lo que dificulta la tarea a los desarrolladores con discapacidad o con poca destreza a la hora de moverse en su entorno de desarrollo. Con Code File Catcher puedes hacer eso fácilmente.

Code File Catcher es una aplicación sencilla pero poderosa que te permite seleccionar una carpeta de tu disco, elegir los tipos de archivos de código que quieres incluir, y obtener automáticamente un texto con todo el contenido de esos archivos perfectamente organizado y listo para copiar o exportar.

Esto resulta especialmente útil si estás trabajando con asistentes de inteligencia artificial como ChatGPT, Gemini o similares, que requieren el contexto completo del código para ofrecer respuestas precisas y útiles.

Entre las distintas operaciones que puede realizar actualmente están: recopila todos los archivos fuente relevantes de un proyecto o carpeta, muestra un texto estructurado con el nombre del archivo y su contenido y puede copiar ese texto al portapapeles o exportarlo como archivo `.txt`.

El proyecto está disponible bajo una licencia libre en GitHub. Puedes consultarlo, usarlo, modificarlo y, si lo deseas, contribuir con mejoras o sugerencias. El proyecto está abierto a colaboraciones, especialmente si pueden ayudar a que la herramienta sea aún más útil para más personas.

Puedes encontrar el código del proyecto y participar en él en el repositorio de Code File Catcher en Github.

Cómo escribir matrices con MathML

Una matriz es una tabla de números organizada en filas y columnas. Las matrices se utilizan ampliamente en muchas ramas de las matemáticas y ciencias aplicadas. Se utilizan para resolver sistemas de ecuaciones lineales, representar transformaciones geométricas, modelar datos en inteligencia artificial o describir redes eléctricas o circuitos.

Para las personas ciegas, escribir y leer matrices puede plantear diversas barreras de accesibilidad como la incapacidad de memorizar toda la información contenida en la matriz, incompatibilidad del producto de apoyo con el formato utilizado para mostrar la matriz, limitaciones de los sistemas de formateado de texto y marcado semántico, etc. En el caso de otros perfiles de discapacidad el producto de apoyo puede encontrar problemas para navegar por los datos de la matriz o no existir una semántica suficiente para identificar filas, columnas o celdas concretas por lo que una persona que utilice un sistema de control por voz o un barredor no podrá interactuar de forma apropiada con la matriz.

Utilizando MathML podemos solucionar muchos de estos problemas ya que aporta semántica y compatibilidad con los diversos productos de apoyo. Con MathML, no solo podemos mostrar una matriz, sino también describirla de forma que cualquier persona, con o sin discapacidad, pueda acceder a su contenido.

Cómo escribir una matriz con MathML

En MathML tenemos el elemento mtable para representar matrices. Además podemos encerrarla entre corchetes utilizando el elemento mfenced como se requiere en algunos ejercicios matemáticos o de física.

El siguiente ejemplo muestra una matriz de 2×2 celdas con los valores 1, 2, 3 y 4:

<math>
<mfenced open="[" close="]">
<mtable>
<mtr>
<mtd><mn>1</mn></mtd>
<mtd><mn>2</mn></mtd>
</mtr>
<mtr>
<mtd><mn>3</mn></mtd>
<mtd><mn>4</mn></mtd>
</mtr>
</mtable>
</mfenced>
</math>

Con el elemento mtr marcamos una fila de la matriz y con mtd marcamos una celda concreta.

En el navegador la matriz se mostraría de la siguiente forma:

1 2 3 4

También podemos escribir la matriz con variables para la resolución de problemas de álgebra:

<math>
<mtable>
<mtr>
<mtd><mi>a</mi></mtd>
<mtd><mi>b</mi></mtd>
</mtr>
<mtr>
<mtd><mi>c</mi></mtd>
<mtd><mi>d</mi></mtd>
</mtr>
</mtable>
</math>

En el navegador se mostraría de la siguiente forma:

a b c d