webview 内容改变时 高度不resize的解决方法

针对WebView在内容更新后高度未自动resize的问题,本文提供了一种解决方案,详细阐述了解决这一问题的方法和步骤,帮助开发者优化WebView在移动应用中的显示效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

情景:邮件详情页上下翻页,共用的一个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);
                    }
                });
            }
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值