7

简单来说:我想在 WebView 中显示的 html 文件中为当前位置(可能是几个位置)添加书签,以便稍后恢复它。任何小提示都会有所帮助。:)

4

2 回答 2

6

如果“当前位置”是指给定页面中的某个点,我认为这是不可能的……至少不是纯粹来自 Java。暴露给 Java 的整个 WebKit API 缺少处理页面内容的任何东西。

如果您可以控制页面内容,并且可以通过页面内 Javascript 了解这些位置,您可以:

步骤#1:使用WebView#addJavascriptInterface()某种recordPosition()方法添加对象,将信息保存在适当的位置

步骤 #2:创建一个调用recordPosition()注入对象的 Javascript 函数。

然后是:

步骤 #3a:从 Javascript 本身触发该 Javascript 函数(例如,基于点击),或

步骤#3b:调用loadUrl("javascript:...");您的WebView,...替换为 Javascript 代码以触发步骤#2 中的 Javascript 函数。

恢复这些位置必须以大致相同的方式工作:让 Javascript 执行实际恢复,可能由 Java 代码触发。

请注意,我不知道您想要的(获取/设置当前位置)是否可以从 Javascript 获得,因为我不是浏览器内的编码器。

于 2009-07-06T11:29:37.633 回答
6

我采取的方法如下:

在该onSaveInstanceState()方法中,计算用户向下滚动页面的距离。

    int contentHeight = webView.getContentHeight();
    int scrollY = webView.getScrollY();

    float scrollPercent = ((float) scrollY / ((float) contentHeight));

把它藏在包里。在onCreate()方法中恢复页面时,等待页面加载完成(在WebClient.onPageFinished()),滚动到记录的位置:

    int contentHeight = webView.getContentHeight(); 
    int y = (int) ((float) contentHeight * scrollPercent);
    webView.scrollTo(0, y);
  • 在横向和纵向之间翻转的情况下,使用 afloat并计算比率有效。
  • 与自动调整大小的图像混合时可能工作得很好,但并不完美。
  • 也可以考虑规模。我倾向于将比例存储在onPause()方法中的首选项中,然后webView.setInitialScale(scale)在开始加载页面之前。
  • 我发现当scrollPercent > 0看起来更好时将网络视图设置为不可见。
于 2009-08-03T20:52:12.343 回答