webview是android加载网页的控件,同时可以支持与js的相互调用。
在创建webview时,系统有一些默认设置,我们可以通过webview.getSettings() 方法来改变一些默认的设置。
WebSettings webSettings = webview.getSettings();
1. 编码格式
webSettings.setDefaultTextEncodingName("utf-8");
2.支持js交互
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(object,"");
3.自适应屏幕
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
4.支持缩放
webSettings.setSupportZoom(true);
5.关闭缓存
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
6.支持通过js打开新窗口
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
7.支持自动加载图片
webSettings.setLoadsImagesAutomatically(true);
二 WebClient 帮助WebView处理各种通知、请求事件的
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});
三WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("对话框")
.setMessage(message)
.setPositiveButton("确定", null);
// 不需要绑定按键事件
// 屏蔽keycode等于84之类的按键
builder.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialogInterface, int keyCode, KeyEvent event) {
return true;
}
});
// 禁止响应按back键的事件
builder.setCancelable(false);
AlertDialog dialog = builder.create();
dialog.show();
result.confirm();// 因为没有绑定事件,需要强行confirm,否则页面会变黑显示不了内容。
return true;
}
});
注意: 当js调用java的方法时,此方法需要加上@JavascriptInterface 注解 (api >17)