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

时间:2016-05-24 07:32:08

标签: android asynchronous webview scrollto

APP说明

我正在为android EPub阅读器编写代码

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

问题

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

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

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位置正确存储到包中并从包中检索。

1 个答案:

答案 0 :(得分:0)

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

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?