以前一直没有用到WebView. 抽空总结了一下WebView的简单使用.
1. 添加权限
<uses-permission android:name="android.permission.INTERNET" />
2. 添加JavaScript支持
myWebView.getSettings().setJavaScriptEnabled(true);
3. 自己处理链接,为WebView添加一个事件监听对象(WebViewClient),
并可重写其public booleanshouldOverrideUrlLoading(WebView view, String url)方法处理对应网页中的超链接
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.indexOf("tel:") < 0)
mWebView.loadUrl(url);
else
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
}
});
4. 处理返回键,重写Activity的onKeyDown或者onBackPressed方法
@Override
public void onBackPressed() {
if (mWebView.canGoBack())
mWebView.goBack();
else
super.onBackPressed();
}
5. 通过file:///android_asset/demo.html指定对应asset目录下的网页,加载本地网页
6. S的对话框,通过setWebChromeClient()方法,重写public boolean onJsAlert(WebView view, String url, Stringmessage, final JsResult result),public boolean onJsConfirm(WebView view, String url, Stringmessage, final JsResult result),public boolean onJsPrompt(WebView view, String url, Stringmessage, String defaultValue, final JsPromptResultresult)方法.
Java调用JS方法
mWebView.loadUrl("javascript:alertJava('Call JS by Java!')");
<script type="text/javascript">
function alertJava(str){
alert(str);
}
</script>
JS调用Java
mWebView.addJavascriptInterface(new JsToJava() {
private static final String TAG = "JsToJava";
@JavascriptInterface
public void logJS(String paramFromJS) {
Log.i(TAG, paramFromJS);
}
}, "stub");
<input type="button" value="callJava" οnclick="window.stub.logJS('call Java form JS')"/>
WebViewClient与WebChromeClient的区别
WebViewClient主要帮助WebView处理各种通知、请求事件的,比如:
public boolean shouldOverrideUrlLoading(WebView view, String url)
public void onLoadResource(WebView view, String url)
public void onPageStarted(WebView view, String url, Bitmap favicon)
public void onPageFinished(WebView view, String url)
public void onReceivedError(WebView view, interrorCode, String description, String failingUrl)
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandlerhandler, String host, String realm)
WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等比如
public void onCloseWindow(WebView window)
public boolean onCreateWindow(WebView view, booleanisDialog, boolean isUserGesture, android.os.Message resultMsg)
public boolean onJsAlert(WebView view, String url, String message,JsResult result)
public boolean onJsPrompt(WebView view, String url, String message,String defaultValue, JsPromptResult result)
public boolean onJsConfirm(WebView view, String url, String message,JsResult result)
public void onProgressChanged(WebView view, intnewProgress)
public void onReceivedIcon(WebView view, Bitmap icon)
public void onReceivedTitle(WebView view, String title)
若只是用来处理一些html的页面内容,只用WebViewClient就行了,若需更丰富的处理效果,比如JS、进度条等,就要用到WebChromeClient.