Pregunta

Estoy intentando desplazarse programación una vista Web a la ubicación de un elemento en particular en el árbol DOM. Pero hasta ahora no he podido obtener la vista Web para responder a las solicitudes de desplazarse. He intentado llamar a JavaScript que utiliza window.scrollTo(...), pero la vista Web no responde. En el lado de Java, he intentado llamar al método WebView.flingScroll(...). WebView responderá a flingScroll, pero lo que necesito es una capacidad scrollTo(...). ¿Alguna idea?

¿Fue útil?

Solución

He encontrado una mejor respuesta a este problema. Resulta que WebView tiene scrollTo(), getScrollX() y métodos getScrollY() como era de esperar. Son un poco escondido en la documentación porque se heredan de View (a través de AbsoluteLayout -> ViewGroup -> View). Esto es obviamente una mejor manera de manipular la posición de desplazamiento del WebView que la interfaz JavaScript algo engorroso.

Otros consejos

Resulta que el window.scrollTo() funciona, simplemente no se puede añadir su propio método llamado scrollTo(). Por alguna razón se invocaba mi propio método scrollTo() cuando llamé window.scrollTo().

Así, en resumen, para desplazarse de un WebView a un elemento DOM en particular, escribir una función JavaScript para hacer el desplazamiento:

function scrollToElement(id) {
    var elem = document.getElementById(id);
    var x = 0;
    var y = 0;

    while (elem != null) {
        x += elem.offsetLeft;
        y += elem.offsetTop;
        elem = elem.offsetParent;
    }
    window.scrollTo(x, y);
}

y después de su aplicación para Android (código Java), informe a su WebView para cargar una URL:

webView.loadUrl("javascript:scrollToElement('" + elemId + "')");

Hay algunos problemas con este enfoque, tales como el desplazamiento no será bien animados, pero funciona el mecanismo general.

El objeto ventana de profundidad hace informar de la posición de desplazamiento actual de la vista Web correctamente (ver window.pageXOffset, window.pageYOffset o window.scrollX, window.scrollY). Si lo que desea es conocer la posición de desplazamiento actual de la vista Web, escribir algo de JavaScript para llamar a su código Java y pasar a lo largo de los desplazamientos X / Y.

No se puede hacer que el uso del código de Java .

Para alls que están atrapados en este problema, tengo alguna conclusión acerca de la búsqueda de una vista web en Android.

  • No se puede desplazar una vista web o conseguir la posición de desplazamiento utilizando código Java.
  • Sólo se puede obtener layoutHeight, measuredHeight, contentHeight de un WebView, nada más. Estos son todos los Android API que permite que se hace en obtener y establecer el estado de desplazamiento.
  • Pero, puede anular la onScorllChanged añadir un oyente auto-definir para desplazarse evento vistas web (o evento aventura), se le notificará la posición de origen y la nueva posición.
  • Bueno, puede desplazarse a una posición utilizando código JavaScript, como la siguiente, pero el rendimiento es muy pobre. Si quiere desplazarse con frecuencia, por favor, darle un segundo pensamiento.
      

    window.scrollTo (100.500)

Tenga en cuenta su situación y elegir una solución adecuada. También se dieron cuenta de que aventura y de desplazamiento son cosas diferentes.

    @Override
        public void onPageFinished(final WebView view, String url) {

            super.onPageFinished(view, url);

                new Handler().postDelayed(new Runnable() {

                        @Override
                        public void run() {
                                if (app.scrollCache.containsKey(app.srctid))
            {
                            app.scrollSpot=app.scrollCache.get(app.srctid); 
                            view.scrollTo(0,(int)app.scrollSpot);
                            }
                        pageFinished=true;
                        }
                    }, 200);


    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top