WebView mWebview;
1 : 加载本地的html
1.1 : 将一个本地的网址放到项目的资产目录下(url)
mWebview.loadUrl("file:///android_asset/url")//file:///android_asset格式固定写法
2 : 加载网络的html文件
mWebview.loadUrl("http://blog.csdn.net/qq_35651451/article/details/52423723");
3 : 双击放大缩小
WebSettings settings = mWebview.getSettings();
settings.setUseWideViewPort(true);
4.显示内建的放大缩小按钮
settings.setBuiltInZoomControls(true);
5.监听加载进度
mWebview.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
mProgressBar.setProgress(newProgress);
super.onProgressChanged(view, newProgress);
}
});
6.监听加载完成,开始
mWebview.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
mProgressBar.setVisibility(View.VISIBLE);
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
mProgressBar.setVisibility(View.GONE);
//加载完成时动态的执行js脚本
executeJs(view, jsScript);
super.onPageFinished(view, url);
}
});
7.拿到webview正在请求的地址
String url = mWebview.getUrl();
8.webview的回退操作
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode ==KeyEvent.KEYCODE_BACK)&&mWebview.canGoBack()) {
mWebview.goBack(); //goBack()表示返回WebView的上一页面
return true;
}
return false;
}
9.允许js
mWebview.getSettings().setJavaScriptEnabled(true);
10.动态在webview中执行js,意思就是在java中可以执行js里面的脚本
mWebview.loadUrl(让webview执行一段js脚本);
//jsScript 是js里面的一个脚本
String jsScript = "alert(\"这个是在java代码里面的一个js脚本\")";
mWebview.loadUrl("javascript:" + jsScript);
11 : 在js中调用java本地代码==>js–>java(在js里面可以调用java本地代码)
11.1 首先定义一个普通的类,在里面定义一些方法 不过方法里面只能传String类型
/**
* 类 名: JsObject
* 描 述: 1.这个类就是一个普通的类
* 描 述: 2.这个类定义的方法是供给js调用
* 描 述: 3.方法传递的参数只能是string,但是其实只要可以传递string,其实什么东西都可以传
*/
public class JsObject {
private String mCurImgUrl;
private String mAllImgUrl;
private Context mContext;
public JsObject(Context context) {
mContext = context;
}
/**
* @param message
* @des js传递相关的数据给java本地代码
* @called 在js里面的相应的方法里面触发调用
*/
@JavascriptInterface//17以上要加这个
public void passMessageToJava(String message) {
System.out.println("message:" + message);
}
}
11.2 :
//参数1:桥梁类(自己的说法)-->1.普通类 2.定义的方法是给js调用 3.方法参数只能是string
//参数2:别名(自己的说法)--->在js里面调用本地方法的时候用到
mWebview.addJavascriptInterface(new JsObject(), "ancely");
11.3 :
写一个本地的html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script language="JavaScript">
var aa = function(){
//在这里调用Java本地代码
window.ancely.passMessageToJava("来自星星的你")
}
</script>
</head>
<body>
</body>
</html>
11.4
这时候加载本地的html文件
mWebview.loadUrl("file:///android_asset/url")//file:
完了之后,这个方法passMessageToJava()里面的输出语句就会执行,并把js肢本里面的数据带过来
public void passMessageToJava(String message) {
System.out.println("message:" + message);
}