概述
WebView是一个特殊的控件, 用来加载网页。它基于WebKit引擎,支持向前和向后导航历史,放大和缩小,进行文本搜索,JS互调,上传文件等等。下面从几方面简单介绍:
- 基本配置
- 基础使用
- 与JS互调
基本配置
setCacheMode(WebSettings.LOAD_NO_CACHE);//设置缓存方式
setPluginsEnabled(true); //支持插件
setSupportZoom(true); //支持缩放
setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局
supportMultipleWindows(); //多窗口
setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
setAllowFileAccess(true); //设置可以访问文件
setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点
setBuiltInZoomControls(true); //设置支持缩放
setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
setLoadWithOverviewMode(true); // 缩放至屏幕的大小
setLoadsImagesAutomatically(true); //支持自动加载图片
基本使用
webView.loadUrl(String Url) //加载一个网页
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
webView.loadUrl(url);
return true;
}
});
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
//newProgress:网页加载进度
}
});
还有一系列方法可以重写,提供的功能挺多的。
Webview与JS互调
JS调Android方法
webView.getSettings().setJavaScriptEnabled(true); //启用支持javascript,开启之后可以跟JS互调方法,互传参数等。
webView.addJavascriptInterface(javaScriptInterface, "kdb");//第一个参数就是我们一般会实现一个自己的类,类里面提供我们要提供给javascript访问的方法。第二个参数是访问我们在obj中声明的方法时候所用到的js对象。
class JavaScriptInterface {
public JavaScriptInterface() {
}
@JavascriptInterface //记得要加这个,不然API 17会无响应
public void CCScan() { //必须和JS的函数名相同
//android本地执行
}
@JavascriptInterface
public void getSomeThing(String str) { //js传入参数给android //android本地执行
}
}
Android调用JS方法
String content="testStr";
webView.loadUrl("javascript:CCScanResult()");//无参调用
webView.loadUrl("javascript:CCScanResult('" + content + "')");//android调用JS的方法,并且传入参数给JS。CCScanResult是JS函数名字,content是要传入的字符串
webView.loadUrl("javascript:CCScanResult('" + content + "','" + name + "')"); //双参数调用
这方面深入了解推荐看看这位大神写的博客,很多调用失败遇到的问题都有提及 android软件开发之webView.addJavascriptInterface循环渐进