Android Webview:开始滚动到页面上的某个点

时间:2012-09-27 09:48:25

标签: android webview scroll

我想将我的网页浏览自动滚动到一个百分比,让我们说是页面的3/4,一开始。

问题:只有在webview完成渲染时才知道computeVerticalScrollRange。当webview完成渲染(不加载,但渲染所有内容)时,我不知道(并调查:我不知道?),当大小(computeVerticalScrollRange)完全是最终的时。

什么行不通:

  1. 当computeVerticalScrollRange仍然返回0时,将调用WebViewClient.onPageFinished。

  2. 当computeVerticalScrollRange仍然返回0时,将调用WebChromeClient.onProgressChanged 100%。

  3. PictureListener.onNewPicture有时被称为太早,当computeVerticalScrollRange尚未最终时(小于之后的秒)。

  4. 编辑HTML,在调用Android类的window.onload上放置一个Javascript处理程序(使用警报)会遇到同样的问题:computeVerticalScrollRange有时候还不是最终的(小于之后的秒) )。

  5. 有没有办法从(滚动点)3/4的网页开始?

2 个答案:

答案 0 :(得分:1)

如果computeVerticalScrollRange发生了变化,我实施了每隔600毫秒(第一个PictureListener.onNewPicture之后)检查的可怕的解决方案。如果此内容大小在过去600毫秒内没有变化,我假设网页完成加载,我进行滚动并在屏幕上显示webview(使其可见)。

可怕:这会使每页页面加载速度减慢600毫秒,即使对于只有几行的页面也是如此。

可怕:对于一个非常大的页面600毫秒可能还不够,我的应用程序仍然不会滚动。

我仍在寻找一个好的解决方案。

答案 1 :(得分:0)

我所做的是创建一个自定义WebView,其中包含computeVerticalScrollRange()的公开方法:

public int getVerticalScrollRange() {
    return super.computeVerticalScrollRange();
}

之后在onPageFinished()中调用此方法:

private void computeWebViewHeight() {
    infoWebView.post(new Runnable() {
        @Override
        public void run() {
            int webViewHeight = customWebView.getVerticalScrollRange();
            // Also have a retryCount max so in case the webView really has a height of 0 you don't have an infinite loop
            if(webViewHeight <= 0 && webViewHeightRetryCount < 10) {
                webViewHeightRetryCount++;
                computeWebViewHeight();
            } else {
                if(webViewHeightRetryCount >= 10) {
                    // RetryCount was above max, so execute fallback
                } else {
                    // WebView has a height, do something with it
                }
                webViewHeightRetryCount = 0;
            }
        }
    });
}

这样你就不会有600毫秒的延迟。

我已将retryCount设置为10,但可能有点低,我不太确定。