Accesibilidad: Talkback, WebView y configuración regional del usuario
He desarrollado una aplicación que incluye una vista Web. Me gustaría hacer que mi aplicación sea totalmente accesible, por lo que para el elemento webview me gustaría que TalkBack leyera elementos html como "Título", "Banner", "EditText" de una manera totalmente accesible.
He visto que el proceso TTS en WebView se realiza a través de inyección de JS a través de la clase AccessibilityInjector.java de Chromium. Esto inyecta esta secuencia de comandos en la página, que sólo tiene los mensajes en inglés. El resultado es que cuando un dispositivo está en otro idioma, el TTS lee estos elementos html en inglés sin importar.
- Vista web de Android "Sincronizar sintaxis: Error inesperado ILEGAL"
- Rendimiento de Android WebView
- Cómo pasar los datos de la vista web a la aplicación nativa de Android
- Programmatic haga clic en Android WebView
- Deshabilitar SoftKeyboard dentro de un WebView
Ahora no puedo depurar o extender el webclient de cromo, así que ¿cómo puedo hacer TTS para leer mi página de acuerdo con la configuración regional del usuario?
EDIT: Estoy utilizando jQuery Mobile por cierto.
- Android WebView addJavascriptInterface no funciona si la vista web se crea en la devolución de llamada de WebChromeClient # onCreateWindow
- Reanudar la vista web de Android cuando se detiene por OS / ejecutar JavaScript en la aplicación en segundo plano?
- ¿Cómo se carga una url dentro de una webview en lugar de androids navegador interno?
- WebView no carga mi HTML la segunda vez?
- Vista web de Android: Mailto no se puede implementar
- Abrir enlace desde Webview de Android en el navegador normal como popup
- Webview que no muestra hipervínculos
- WebView clearHistory () en la funcionalidad de Webview canGoback ()?
Por si alguien tropieza con este problema: tuve que aplicar una solución fea para superar esto. Cada vez que carga una página y TalkBack está habilitado, reinyecto las variables de javascript que contienen el texto a leer, con sus contrapartes localizadas. Por ejemplo, para el texto en español:
view.loadUrl("javascript:window.setTimeout(function(){" + "window.console.log(\"Injecting messages.\");" + "cvox.TestMessages[\"chromevox_input_type_text\"] = {message: \"cuadro de edición\"};" + "cvox.TestMessages[\"chromevox_input_type_radio\"] = {message: \"botón de opción\"};" + "cvox.TestMessages[\"chromevox_selected\"] = {message: \"seleccionado\"};" + "cvox.TestMessages[\"chromevox_unselected\"] = {message: \"no seleccionado\"};" + "cvox.TestMessages[\"chromevox_radio_selected_state\"] = {message: \"seleccionado\"};" + "cvox.TestMessages[\"chromevox_radio_unselected_state\"] = {message: \"no seleccionado\"};" + "cvox.TestMessages[\"chromevox_input_type_submit\"] = {message: \"botón\"};" + "cvox.TestMessages[\"chromevox_input_type_button\"] = {message: \"botón\"};" + "cvox.TestMessages[\"chromevox_tag_button\"] = {message: \"botón\"};" + "}, 2000)");
Tenga en cuenta que insertar un tiempo de espera antes de inyectar las variables – esto es para evitar que chromevox de ser inyectado después de mi inyección por lo que la solución inútil.
Sé que este es un parche feo, pero no pude encontrar mejores soluciones sin acceso a las clases de cromo webview.
- Android ListView con encabezado y pie de página fijos
- Android WebView lanza "peticiones de origen cruzado sólo son compatibles con http" excepción al intentar cargar recursos desde el disco