android webview accessibility android-a11y

Accesibilidad y Android WebView



accessibility android-a11y (5)

La accesibilidad de la vista web de Android se habilita a través de la inyección de javascript en Honeycomb y superior (según lo señalado por alanv ). El usuario debe habilitarlo mediante:

  • Activar el modo de accesibilidad, incluido "Explorar al tacto" en 4.0+.
  • Habilitar "Accesibilidad web mejorada" o, en dispositivos anteriores, "Inyectar secuencias de comandos web".

Esto funciona al inyectar javascript en cada página cargada a través de etiquetas <script> . Tenga en cuenta que tendrá que tener cuidado, ya que no todo el contenido se verá bien con este javascript y la inyección fallará en algunos casos de borde.

¿Está habilitada la accesibilidad para Android WebView? ¿Alguien puede decir cómo hacer que un WebView sea accesible?


No, no se puede acceder a WebView desde el servicio TalkBack incorporado, al menos a partir de la versión 4.0 de Android. En su lugar, los usuarios ciegos tienen instrucciones de usar algo como Mobile Accessibility para Android , que proporciona una interfaz de navegación hablada. Yo sugeriría que su contenido esté disponible para otros procesos, permitiendo a los usuarios ciegos ver el contenido en el navegador de su elección. Hice esto al iniciar el intento de ver el contenido:

public static void loadUrlInBrowser(Context c, Uri uri) { Intent i = new Intent(Intent.ACTION_VIEW); i.setDataAndType(uri, "text/html"); c.startActivity(i); }

Alternativamente, puede establecer la descripción del contenido de la vista web. Tenga en cuenta que esto solo parece funcionar en versiones anteriores a 4.0 de Android. Descubrí que los dispositivos 4.0 siguen diciendo WebView o nada en absoluto.



Sé cómo acceder al contenido de la vista web mediante la API de accesibilidad, cuando AccessibilityNodeInfo.getText () es nulo o "nulo", llame a AccessibilityNodeInfo.getContentDescription ().

código simple:

private String getTextOrDescription(AccessibilityNodeInfo info) { String text = String.valueOf(info.getText()); if (isEmptyOrNullString(text)) { text = String.valueOf(info.getContentDescription()); } return text; } private boolean isEmptyOrNullString(String text) { if (TextUtils.isEmpty(text) || text.equalsIgnoreCase("null")) { return true; } return false; }

getContentDescription () puede obtener el contenido de la vista web.

disculpa mi pobre ingles.


También me encontré con este problema en los dispositivos 4.0. Terminé colocando un TextView encima de la WebView, haciendo que el fondo y el texto de TextView fueran transparentes. El contenido de texto de TextView se establece en el contenido de WebView con todas las etiquetas HTML eliminadas.

Una solución poco elegante, lo sé, pero bueno, funciona ...