Android 3.x SOLO Selección de texto de WebView + JavaScript

Dominio del problema: lector de formato ePub basado en Android WebView –

Necesitamos resaltados de texto que son accesibles a través de métodos JavaScript (es decir, activarlos, apagarlos, guardarlos enviarlos por correo electrónico, etc.)

Alguien en el saber, por favor, corrija si estoy equivocado: Durante la selección de texto en un WebView –

Básicamente se nos entregó una superposición de TextView (WebTextView) que está de ninguna manera adjunta al html subyacente aparte de visualmente (buen trabajo en alinear todo y hacer que sea transparente, btw), en el que realizamos el TextSelectionActionMode y el ClipboardManager se suministra Con los resultados … para que quede claro, el HTML real con el WebView NO es realmente seleccionado en cualquier momento durante este proceso de stock, que es por qué el JavaScript no puede acceder a los resultados de la acción.

Así que para hacer que este comportamiento funcione en 3.1+, tengo algunos planes posibles de seguir adelante para implementar mi propia selección en un WebView – esta es la parte donde me pregunto si no puedo ver fuera de mi esquina 🙂 – –

1) capturar MOTION_DOWN del clic largo que inicia el modo de selección, anular el construido en TextSelection ActionMode (para provde la marca de los clientes – la forma en que encontré hacerlo es tan hackish que duele) ver el arrastre, capturar MOTION_UP posición, Coords en el WebView, y hacer mi selección basada en los coords (mientras se compara el texto con el capturado por el ClipboardManager)

2) crear mi propio "WebTextView" (whole lotta trabajo lol) y no-tan- hackeamente crear mi propio ActionMode y hacer todo lo anterior.

3) utilizar los MotionEvents generados por el proceso de selección de valores y de alguna manera anular la acción TextSelection ActionMode desencadenada por esto.

Estas son las opciones que veo, espero que mi proximidad y la frustración con esto me han cegado a una solución más simple (leer que como built-in) o dos.

Gracias de nuevo por tu tiempo.

Tengo este trabajo en 2.2 – 4.0.3. Utilicé una interfaz javascript y pasé todos los toques a ella. La solución parece funcionar bastante bien y he puesto un proyecto de ejemplo en github. El proyecto github incluye el js necesario en la carpeta de activos, así como una página de prueba y una vista web que carga la página de prueba e implementa todos los métodos necesarios para manejar la selección. El enlace al proyecto github es https://github.com/btate/BTAndroidWebViewSelection . Tienen en él.

No estoy 100% seguro de qué métodos / propiedades le dan el rango y la selección. No vi ninguno en la documentación. Pero pude conseguir el rango seleccionado en píxeles usando la reflexión. No estoy seguro si esto ayuda a cualquiera, pero pensé que valía la pena publicar aquí.

Region result = null; try { Object[] params = null; Method nativeGetSelectionRegion = WebView.class.getDeclaredMethod("nativeGetSelectionRegion"); nativeGetSelectionRegion.setAccessible(true); result = (Region)nativeGetSelectionRegion.invoke(this, params); Log.i(TAG, "res: region " + result.getBounds().toShortString()); } catch (Exception e) { e.printStackTrace(); } 

Espero que eso ayude a alguien

EDIT: Esto no funciona en 3.1+

  • Evite Android de cerrar la pantalla mientras la aplicación (con Phonegap) está activada
  • Menú contextual y dispositivos con pantalla táctil
  • ¿Puedo usar el servicio técnico con socket-io?
  • ¿Es posible activar el menú compartido en smartphones (a través de HTML / JS)?
  • ¿Dónde poner mi archivo php?
  • Impedir el cierre automático del portal en cautiverio después de la autenticación (Android)
  • La aplicación se comporta diferente después de salir y volver a entrar
  • JavaScript no funciona en Android WebView
  • ¿Cuál es la causa de este problema "No se puede convertir el argumento de la clase de tipo org.json.JSONArray" en reaccionar-androide nativo?
  • Cómo ver la salida del registro de consola en la galaxia S2 de Samsung
  • Recoge la versión de Android en el navegador por Javascript
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.