一、WebView简介
在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView的组件;WebView(网络视图)能加载显示网页;
二、WebView的使用
WebView简单使用的步骤如下:
(1)、在布局文件中声明WebView
(2)、在Activity中实例化WebView
(3)、需要在AndroidManifest.xml文件中添加网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
(4)、调用WebView的loadUrl( )方法,设置WevView要显示的网页
(5)、为了让WebView能够响应超链接功能,需要通过setWebViewClient( )设置WevViewClient
(6)、如果想要知道网页加载进度等信息,需要通过setWebChromeClient()设置
WebChromeClient;
WebView主要属性设置如下:
//设置滚动条样式
webview.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
webview.setHorizontalScrollBarEnabled(false);
//加载网络页面
webview.loadUrl(url);
//加载本地html
webView.loadUrl("file:///android_asset/demo.html");
//加载html源码
webView.loadDataWithBaseURL("","html源码","text/html","utf-8","");
WebView网页现实的相关设置要通过
WebSettings设置,如下:
WebSettings settings = webview.getSettings();
//支持JavaScript
settings.setJavaScriptEnabled(true);
//支持网页缩放
settings.setSupportZoom(true);
settings
.setBuiltInZoomControls(true);
//设置网页缓存
settings.setAppCacheEnabled(true);// 开启缓存
ettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);// 缓存优先模式
settings.setAppCacheMaxSize(8 * 1024 * 1024);// 设置最大缓存为8M
//支持多窗口
settings.setSupportMultipleWindows(true);
重写WevViewClient:
public class MyWebViewClient extends WebViewClient{
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
}
重写
WebChromeClient
:
WebChromeClient mChromeClient = new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
/**
* 支持alert效果
*/
@Override
public boolean onJsAlert(WebView view, String url, String message, f inal JsResult result) {
//此处可以弹出dialog
return true;
}
/**
* 处理Js的Confirm
*/
public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
//此处可以弹出警告弹框
return true;
}
};
三、重写返回键实现点击返回键回退网页
//覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack(); //goBack()表示返回WebView的上一页面
return true;
}
return false;
}
四、 WebView和JaveScript交互:
webView.addJavascriptInterface(new JsToJava(), "stub");//js调用Android
//调用JS方法,并传递参数
webView.loadUrl("javascript:invokedByJava('哈哈')");
private class JsToJava {
@JavascriptInterface
public void jsMethod(final String paramFromJS) {
webView.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,paramFromJS,Toast.LENGTH_SHORT).show();
}
});
}
}
html代码:
<html>
<head>
<title>JS交互</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<script type="text/javascript">
function invokedByJava(param) {
document.getElementById("content").innerHTML = "Java has invoked JS function and returnd the data:"+param;
}
</script>
</head>
<body>
<p id="content"></p>
<p>
<input type="button" value="调用Java方法" οnclick="window.stub.jsMethod('来至JS的参数');" />
<input type="button" value="调用alert" οnclick="alert('hello')" />
</p>
</body>
</html>