Android,加载数据后将webview滚动到Y位置

Android, scroll webview to Y position after data is loaded

APP描述

我正在为 android EPub reader.

编写代码

图书部分 (html) 已加载到 WebView

问题

设备旋转后,我试图滚动到 webview 中的最后一个位置作为文本。

数据由 loadData(text, ..., ...) 加载到 webview 中,因为我不是从 URL 加载网页,而是从本地保存的 html EPub 文件中加载网页。

webView.loadData(text, "text/html; charset=UTF-8", null);

我发现这个函数是异步的,我必须等到数据完全加载后再尝试滚动。

我已经尝试过建议的解决方案,例如

final int Y = savedInstanceState.getInt(CURRENT_WEBVIEW_POSITION_Y);

webView.postDelayed(new Runnable() {
    public void run() {
        if (webView.getProgress() == 100) {
            webView.postDelayed(new Runnable() {
                public void run() {
                    webView.scrollTo(0, Y);
                }
            }, 10);
        } else {
            webView.post(this);
        }
    }
}, 10);

final int Y = savedInstanceState.getInt(CURRENT_WEBVIEW_POSITION_Y);

while (webView.getProgress() < 100){
    Thread.sleep(50);
}
Thread.sleep(10);
webView.scrollTo(0, Y);

但是他们没有用。

webview 的 Y 位置正确地存储到 bundle 中并从 bundle 中检索。

通过修改第一个代码解决的问题:

webView.postDelayed(new Runnable() {
    @Override
    public void run() {
        if (webView.getContentHeight() > 0){
            webView.scrollTo(0, Y);
            webView.removeCallbacks(this);
        } else {
            webView.postDelayed(this, 10);
        }
    }
}, 10);

这里解决了Is there a listener for when the WebView displays it's content?