2

最初に、ページの 3/4 としましょう。

問題: computeVerticalScrollRange は、webview のレンダリングが終了したときにのみ認識されます。サイズ(computeVerticalScrollRange)が完全に最終的なとき、WebViewのレンダリングがいつ終了するか(ロードではなく、すべてをレンダリングするか)わかりません(そして調査しました:わかりませんか?)。

機能しないもの:

  1. WebViewClient.onPageFinished は、computeVerticalScrollRange がまだ 0 を返すときに呼び出されます。

  2. WebChromeClient.onProgressChanged 100% は、computeVerticalScrollRange がまだ 0 を返すときに呼び出されます。

  3. PictureListener.onNewPicture は、computeVerticalScrollRange がまだ最終ではない (1 秒後の値よりも小さい) 場合に、あまりにも早く呼び出されることがあります。

  4. HTML を編集し、(アラートを使用して) Android クラスを呼び出している window.onload に Javascript ハンドラーを配置すると、同じ問題があります。

Web ページの (スクロール ポイント) 3/4 から開始する方法はありますか?

4

2 に答える 2

1

computeVerticalScrollRange が変更された場合、(最初の PictureListener.onNewPicture の後) 600 ミリ秒ごとにチェックするという恐ろしい解決策を実装しました。このコンテンツ サイズが最後の 600 ミリ秒で変化しなかった場合、Web ページの読み込みが完了し、スクロールして Web ビューを画面に表示する (見えるようにする) と想定しています。

恐ろしい: これにより、数行しかないページであっても、すべてのページの読み込みが 600 ミリ秒遅くなります。

恐ろしい: 非常に大きなページの場合、600 ミリ秒では不十分な場合があり、アプリはまだスクロールしません。

私はまだ良い解決策を探しています。

于 2012-09-28T12:23:12.447 に答える
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;
            }
        }
    });
}

この方法では、600ms の遅延はありません。

retryCount を 10 に設定しましたが、少し低いかもしれません。よくわかりません。

于 2017-02-08T10:55:15.513 に答える