应用说明
我正在为 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/