近期发现了一个关于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 交互方式 都在这里了
最后附上我看到的那位大神的文章(万分感谢他)