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

标签 android asynchronous webview scrollto

应用说明

我正在为 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 位置正确地存储到 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?

关于Android,加载数据后将webview滚动到Y位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37407095/

相关文章:

java - Android webView在fragment中显示空白页面

Android 文件选择器未从 Lollipop 或 Marshmallow 中的 WebView 打开

android - 当通过 Intent 调用 BroadcastReceiver 时,它在哪个进程上运行?

android - 来自 xml 的字符串,它是一个 anchor 标记,单击它时不显示浏览器列表

java - 禁用 OnClickListener Android

javascript - 我如何知道最后一个异步操作何时完成?

c# - 在后台线程上执行异步套接字

android - 将多个文件上传到android中的服务器时的进度条

android - 如何在 Android Webview 中停止后台播放声音

android - 将Gradle项目导入Android Studio时出错