2012-02-22 23 views
8

Sto provando a utilizzare il metodo scrollTo di Webview. Questo è il mio file di layout per la visualizzazione web.WebView scrollTo non funziona

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
> 
<WebView 
    android:id="@+id/webMap" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
/> 
</LinearLayout> 

Quello che sto cercando di fare è mostrare un file html (che ha solo un'immagine mappa) e lo scorrimento a certa area sull'immagine con:

mapWebView.loadUrl("file:///android_asset/maps/map.html"); 
mapWebView.scrollTo(300, 300); 

Ma quando il WebView viene caricato esso mostra sempre il (0, 0) dell'immagine.

Qual è il problema con scrollTo() qui?

+0

Date un'occhiata @ http://stackoverflow.com/questions/22737412/android-webview-scrollto-is-not-working/22920457#22920457 –

risposta

16

Sospetto che mapWebView.loadUrl("file:///android_asset/maps/map.html"); sia asincrono, quindi mapWebView.scrollTo(300, 300); viene eseguito prima che la webview abbia completato il caricamento. Una volta caricata la pagina, avrà perso l'impostazione di scorrimento applicata e verrà ripristinata in cima.

avete bisogno di ascoltare in per la pagina di carico e quindi scorrere esso:

mapWebView.setWebViewClient(new WebViewClient(){ 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      // TODO Auto-generated method stub 
      super.onPageFinished(view, url); 
      mapWebView.scrollTo(300, 300); 
     } 

    } 
    ); 

Spero che questo aiuti

EDIT: Si scopre che questo non è affidabile, utilizzare questo invece:

mapWebView.setPictureListener(new PictureListener() { 

     @Override 
     public void onNewPicture(WebView view, Picture picture) { 
      mapWebView.scrollTo(300, 300); 

     } 
    }); 
+0

Grazie per la risposta Dean. Ho anche provato, ma ancora non funziona. Tuttavia, dopo scrollTo() ho chiamato getScrollX() e getScrollY() per vedere cosa restituiscono ed è (300, 300). Ma l'immagine è ancora attiva (0, 0). – penguru

+0

Prova l'altro codice che ho postato, sembra che il metodo di caricamento finito a volte scocchi prima che la pagina venga effettivamente caricata, specialmente se hai immagini che fai –

+2

Grazie Dean, setPictureListener funziona alla grande! – penguru

1

Prova questo ..:

try { 
webview.setWebChromeClient(new WebChromeClient() { 

    @Override 
    public void onProgressChanged(WebView view, 
      int newProgress) { 

     if (newProgress >= 100) { 

      webview.scrollTo(x,y); 
     } 

     super.onProgressChanged(view, newProgress); 
    }; 

}); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
0

In seguito, l'override funziona meglio per me.

protected void onLayout(boolean changed, int l, int t, int r, int b) { 
// set initial scroll to 
scrollTo(yourXpos,yourYpos); 
super.onLayout(changed, l, t, r, b); 
} 
Problemi correlati