2012-02-22 3 views
8

Я пытаюсь использовать метод scrollTo для веб-просмотра. Это мой файл макета для веб-просмотра.WebView scrollTo не работает

<?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> 

То, что я пытаюсь сделать, это показывая HTML-файл (который имеет только изображение карты) и прокрутка определенной области на изображении с:

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

Но когда WebView загружается его всегда показывает (0, 0) изображения.

В чем проблема с scrollTo()?

+0

Посмотрите @ http://stackoverflow.com/questions/22737412/android-webview-scrollto-is-not-working/22920457#22920457 –

ответ

16

Я подозреваю, что mapWebView.loadUrl("file:///android_asset/maps/map.html"); является асинхронным, поэтому mapWebView.scrollTo(300, 300); выполняет перед тем, как веб-просмотр завершил загрузку. Как только страница загрузится, она потеряет установленную вами настройку прокрутки и будет сброшена на верх.

Вы должны слушать для загрузки страницы, а затем прокрутить его:

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); 
     } 

    } 
    ); 

Надеется, что это помогает

EDIT: Оказывается, это ненадежно, используйте вместо этого:

mapWebView.setPictureListener(new PictureListener() { 

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

     } 
    }); 
+0

Спасибо за ответ Дина. Я тоже пробовал, но все равно не работаю. Однако после scrollTo() я вызвал getScrollX() и getScrollY(), чтобы увидеть, что они вернут, и это (300, 300). Но изображение все еще включено (0, 0). – penguru

+0

Попробуйте другой код, который я разместил, похоже, что готовый метод загрузки иногда срабатывает до загрузки страницы, особенно если у вас есть изображения, которые вы делаете. –

+2

Спасибо, Dean, setPictureListener отлично работает! – penguru

1

Попробуйте следующее:

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

Следующее переопределение работает лучше для меня.

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); 
}