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

  • GetActionBar () devuelve null
  • ¿Cómo ocultar la barra de acción antes de que se cree la actividad, y luego mostrarla de nuevo?
  • WebView dentro de ViewPager o ScrollView - extraño error de renderizado en Android 3.0+
  • Cómo detectar los clics de botón del sistema "Aplicaciones recientes" (Honeycomb +)
  • Actividad acelerada de HW - ¿Cómo obtener el límite de tamaño de textura de OpenGL?
  • Tamaño de fuente demasiado grande para caber en caché
  • 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.

  • Comparar imágenes SIFT / SURF detalles en archivos .yml OpenCV?
  • Android Clic en el texto de la pantalla
  • Cómo crear aplicaciones de sistema en android
  • Android: ¿Cómo abrir una carpeta específica a través de Intent y mostrar su contenido en un navegador de archivos?
  • Ejemplo de uso de ContentLoadingProgressBar
  • Progressbar WebView como navegador de Chrome
  • 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.