WebView scrollTo не работает
Я пытаюсь использовать метод scrollTo webview. Это мой файл макета для webview.
<?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()
здесь?
3 ответов
Я подозреваю, что mapWebView.loadUrl("file:///android_asset/maps/map.html");
- это асинхронные, так mapWebView.scrollTo(300, 300);
выполняется до завершения загрузки webview. Как только страница загрузится, она потеряет настройки прокрутки, которые вы применили, и будет сброшена наверх.
вам нужно прослушать загрузку страницы, а затем прокрутить ее:
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);
}
});
попробуйте это..:
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();
}
следующее переопределение работает лучше для меня.
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);
}