Accesibilidad de Android: ¿Cómo cambio el texto leído en voz alta para una Vista de Edición de Texto
De forma predeterminada, los Servicios de accesibilidad leerán lo siguiente para una vista EditarTexto
- Si EditText tiene un valor introducido = leerá ese valor
- Si no hay valor introducido = se leerá la "sugerencia"
Quiero que lea algo completamente diferente en ambos casos.
- Personalizar Android Talkback en diálogo de alerta?
- ¿Por qué nextFocusDown no funciona con la navegación de TalkBack?
- Android: evita que TalkBack anuncie el título de TextView en voz alta
- Android: ¿Cómo forzar Explore-By-Touch / Talkback para repetir la ContentDescription de la vista actual en AccessibilityFocus?
- Cómo agregar contentDescription a ListPreference?
Mi fragmento xml es
<EditText android:id="@+id/my_edit_text" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_weight="1" android:editable="false" android:focusable="true" android:hint="my hint text"/>
Tengo que apoyar API 14 y adelante.
No quiero ir a la molestia de extender EditText para este solo caso, por lo tanto estoy usando am AccessibilityDelegate.
mEditTextView.setAccessibilityDelegate(accessibilityDelegate);
De la documentación entiendo que en mi delegado sólo tengo que sobrescribir esos métodos en el delegado para el que me gustaría cambiar el comportamiento. Todos los demás métodos predeterminarán la implementación de View.
Http://developer.android.com/reference/android/view/View.AccessibilityDelegate.html http://developer.android.com/reference/android/view/View.html
El documento de "onPopulateAccessibilityEvent" dice: " Da una oportunidad a la vista de host para rellenar el evento de accesibilidad con su contenido de texto. " El documento de "dispatchPopulateAccessibilityEvent" dice: " Despacha un AccessibilityEvent al host Ver primero y luego a sus hijos para Añadiendo su contenido de texto al evento "y que el comportamiento predeterminado es llamar" onPopulateAccessibilityEvent "para la vista en sí y luego" dispatchPopulateAccessibilityEvent "en todos sus hijos
Http://developer.android.com/guide/topics/ui/accessibility/apps.html
Este documento dice en "onPopulateAccessibilityEvent" "* Si su implementación de este evento anula completamente el texto de salida sin permitir que otras partes de su diseño modifiquen su contenido, entonces no llame a la super implementación de este método en su código.
Por lo tanto mi delegado es el siguiente
View.AccessibilityDelegate accessibilityDelegate = new View.AccessibilityDelegate() { @Override public void onPopulateAccessibilityEvent(View v, AccessibilityEvent event) { event.getText().add("Apples"); } };
¿Por qué cuando uso el teclado para navegar o utilizar la pantalla para tocar en la vista EditarTexto sigue leyendo "mi texto de sugerencia" y no "manzanas"?
Si utilizo un depurador, veo que antes de establecer el texto del evento, el texto está vacío y después de configurarlo, es "Manzanas", pero el TalkBack todavía lee la pista.
Extrañamente si sobrescribo "onInitializeAccessibilityNodeInfo" y envío un evento con el texto deseado, entonces este texto deseado se lee (vea el siguiente fragmento de código). Pero esto me parece incorrecto ya que el "onInitializeAccessibilityNodeInfo" está reaccionando al evento de EditText, pero luego sólo se levanta un nuevo.
@Override public void onInitializeAccessibilityNodeInfo(View v, AccessibilityNodeInfo info){ super.onInitializeAccessibilityNodeInfo(v, info); ... final AccessibilityEvent event = AccessibilityEvent.obtain(eventType); event.getText().add("Pears"); event.setClassName(className); event.setPackageName(packageName); ... v.getParent().requestSendAccessibilityEvent(v, event); }
- Accesibilidad de Android talkback para decir el título del fragmento
- Función de conversación de RecyclerView no bien
- Android: evita que TalkBack anuncie el título de TextView en voz alta
- Cómo agregar contenidoDescrito a InfoWindow o marcador en Android GoogleMaps V2 para TalkBack
- Acceso total al tacto a pesar de TalkBack / lector de pantalla
- Configuración de la descripción del contenido del menú de opciones android Talkback
- Android Talkback no lee caracteres utf-8 en la vista Web usando html
- ¿Hay una manera estándar de sugerir que un número debe ser leído un carácter a la vez?
Esto suena muy similar a un problema que encontré anteriormente: Android: ¿Cómo eliminar el texto hablado de AccessibilityEvents al extender SeekBar?
¿Has probado (como prueba) borrar el texto de la pista en onPopulateAccessibilityEvent
, en lugar de simplemente agregar el texto 'Apples'? Parece que recuerdo que mis resultados empíricos no coinciden con la documentación de Android, en particular para el sistema operativo Android antes de la API 14.
- Uso de renderscript para procesamiento y mediacodec para codificación
- Desplazamiento vertical en el visor