日常工作记录:解决ScrollView嵌套WebView改变字体后,后面留一大片空白的问题

     近期发现了一个关于WebView的问题,纠结了我两天。是这样的公司项目用WebView来展示H5信息,并带有改变字体功能,改变字体这个功能也比较容易实现而且WebView自带的.就是

 WebSettings settings = mWebView.getSettings();  
 settings.setTextSize(WebSettings.TextSize.SMALLEST);
 settings.setTextSize(WebSettings.TextSize.LARGER);

       但是问题来了,就是我把字体变大之后再变回小,WebView后面留有一大片空白的情况。百度了很久关于这方面的资料也不多,很难才找到那几个方法也没有效果。我都准备放弃的时候,发现一个大神的博客提供了一个方法,试了果然可以,万分感谢。大概思路应该是通过改变字体后,我们获取H5的高度,再把这个高度传回安卓动态去改变Webview的高度。

第一步:启用开启支持调用js方法

 WebSettings settings = mNewsWebView.getSettings();
 //设置webview支持javascript脚本       
 settings.setJavaScriptEnabled(true);

第二步:写JS通信接口(里面的方法resize就是改变字体后重新计算webview的高度的)

注意:方法必须加上 @android.webkit.JavascriptInterface 否则无效

 // js通信接口
    public class JavascriptInterface {
        private Context context;
        public JavascriptInterface(Context context) {
            this.context = context;
        }
        @android.webkit.JavascriptInterface
        public void resize(final float height) {
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mWebView.setLayoutParams(new FrameLayout.LayoutParams(getResources().
                            getDisplayMetrics().widthPixels, (int) (height * getResources().getDisplayMetrics().density)));
                }
            });
        }
    }

第三步:通过addJavascriptInterface()将Java对象映射到JS对象

mWebView.addJavascriptInterface(new JavascriptInterface(mContext), "js_listener");

最后一步:就是在调用了改变字体方法后

mWebView.getSettings().setTextSize(WebSettings.TextSize.SMALLER);
mWebView.loadUrl("javascript:js_listener.resize(document.body.getBoundingClientRect().height)");

注意:第三步里面addJavascriptInterface里的的"js_listener"要与loadUrl里面的对应上。

大概就是这样了,如果有朋友对Android与JS不是太懂的话可以参考

Android:你要的WebView与 JS 交互方式 都在这里了

最后附上我看到的那位大神的文章(万分感谢他)

ScrollView与WebView结合使用时,设置webview字体大小的时候出现下方留白的终极解决方案

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值