webview 內容改變時 高度不resize的解決方法

情景:郵件詳情頁上下翻頁,共用的一個webview,當內容改變時,webview高度沒有重繪,下方有大量留白。
解決方法:
重寫webViewClient()的onPageStarted()方法,重新測量webview的寬高。觸發重繪方法。

代碼:
webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //fix bug- 攔截三星某幾款手機對地址對了重新加載,加載異常
                if (!TextUtils.isEmpty(url) && url.startsWith("geo:")) {
                    return true;
                }
                BaseWebViewFragment.show(getActivity(), "", url, true);
                return true;//true表示此事件在此處被處理,不需要再廣播
            }

            @Override
            public void onPageStarted(final WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                Methods.log("onPageStarted");
                //爲了使webview加載完數據後resize高度,之所以不放在onPageFinished裏,是因爲onPageFinished不是每次加載完都會調用
                int w = View.MeasureSpec.makeMeasureSpec(0,
                        View.MeasureSpec.UNSPECIFIED);
                int h = View.MeasureSpec.makeMeasureSpec(0,
                        View.MeasureSpec.UNSPECIFIED);
                //重新測量
                view.measure(w, h);
                view.post(new Runnable() {
                    @Override
                    public void run() {
                    //回到頁面頂端
                        scrollView.scrollTo(0, 0);
                    }
                });
            }

解法2:

 webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                ViewGroup.LayoutParams layoutParams = webView.getLayoutParams();
                layoutParams.height = 0;
                webView.setLayoutParams(layoutParams);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //fix bug-http://qa.d.xiaonei.com/jira/browse/HFA-2824 攔截三星某幾款手機對地址對了重新加載,加載異常
                if (!TextUtils.isEmpty(url) && url.startsWith("geo:")) {
                    return true;
                }
                BaseWebViewFragment.show(getActivity(), "", url, true);
                return true;//true表示此事件在此處被處理,不需要再廣播
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                ViewGroup.LayoutParams layoutParams = webView.getLayoutParams();
                layoutParams.height = WebView.LayoutParams.WRAP_CONTENT;
                webView.setLayoutParams(layoutParams);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        scrollView.scrollTo(0, 0);
                    }
                });
            }
        });
發佈了32 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章