Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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.)

  • ¿Cómo ocultar la barra de acción antes de que se cree la actividad, y luego mostrarla de nuevo?
  • Android: ¿Cómo cambiar el icono "Home" de ActionBar para que sea algo distinto del icono de la aplicación?
  • Tamaño de fuente demasiado grande para caber en caché
  • ¿Funciona la gran pila de Android para teléfonos antiguos actualizados a ICS?
  • Implementación de las pestañas ActionBar con v4 Fragments API
  • Android GridView con categorías?
  • 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.

  • SVG vs PNG en Android
  • Cree un cursor de matriz en lugar de DB
  • CollapsingToolBarLayout - barra de estado
  • Eliminar marcador anterior y agregar nuevo marcador en Google Map v2
  • ¿Cómo utilizar las anotaciones de Java para guiar Proguard de Android?
  • ExpandableListView expandir sólo en un botón específico?
  • 2 Solutions collect form web for “Android 3.x SOLO Selección de texto de WebView + JavaScript”

    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+

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.