Webview - setInitialScale阻止scrollTo滚动Webview

时间:2014-01-10 09:07:30

标签: android webview scroll scale

我正在使用Webview和本地html文件开发一个严肃的书籍应用程序。

我想让用户以他选择的相同字体大小返回他读取的最后一个位置。

  • 字体大小 - 当用户关闭App时,我使用getScale来存储选择缩放,当用户打开App时,我使用setInitialScale和存储的缩放来加载它。它运作良好。
  • 位置 - 当用户关闭应用程序时,我正在使用getScrollY来存储滚动,当用户打开应用程序时,我通过使用存储滚动的scrollTo来加载它。它运作良好。

问题是当我同时使用两者时。正确加载字体大小,但滚动没有发生,我看到html文件的顶部。 我试图将setInitialScale和scrollTo放在代码中的不同位置,但没有解决问题。

知道如何实施它?

也许webview有任何方法允许以其他方式进行吗?

1 个答案:

答案 0 :(得分:0)

您可能正在进行某种竞争 - 在WebView完成加载并且布局通过之前,您无法调用scrollTo

一种方法是覆盖WebView.onSizeChanged并等待WebView在滚动之前调整到“正确”高度:

@Override
void onSizeChanged(int w, int h, int ow, int oh) {
    super.onSizeChanged(w, h, ow, oh);
    if (h >= savedScrollOffset)
      scrollBy(0, savedScrollOffset);
}

如果您控制HTML并使用JavaScript,另一个选项是使用JavaScript保存和恢复滚动偏移。您可以使用LocalStorage保存滚动偏移,然后在加载页面时从LocalStorage恢复它。