Android WebView在Android平台上是一个特殊的View, 他能用来显示网页,这个类可以被用来在你的app中仅仅显示一张在线的网页,还可以用来开发浏览器。WebView内部实现是采用渲染引擎来展示view的内容,提供网页前进后退,网页放大,缩小,搜索。在Android 4.3系统及其一下WebView内部采用Webkit渲染引擎,在Android 4.4采用chromium 渲染引擎来渲染View的内容。
A View that displays web pages. This class is the basis upon which you can roll your own web browser or simply display some online content within your Activity. It uses the WebKit rendering engine to display web pages and includes methods to navigate forward and backward through a history, zoom in and out, perform text searches and more.
使用时,主要注意两个方法:
setWebViewClient: 主要处理解析,渲染网页等浏览器做的事情
setWebChromeClient: 辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等
WebViewClient就是帮助WebView处理各种通知、请求事件的。
具体使用:
在AndroidManifest.xml设置访问网络权限:
<span style="font-size:18px;"><uses-permission android:name="android.permission.INTERNET"/></span>
控件:
<span style="font-size:18px;"><WebView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/webView" /></span>
本地,
资源放在assets文件夹下:
webView = (WebView) findViewById(R.id.webView); webView.loadUrl("file:///android_asset/example.html");
网络,
webView = (WebView) findViewById(R.id.webView); webView.loadUrl("http://baidu.com");
需要重写自己的WebViewClient,通过setWebViewClient关联
package com.example.testopen; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends Activity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test); init(); } private void init(){ webView = (WebView) findViewById(R.id.webView); //WebView加载web资源 webView.loadUrl("http://baidu.com"); //覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开 webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器 view.loadUrl(url);//用对应webView加载对应url内容进行显示 return true; } }); } }
如果访问的页面中有Javascript,则webview必须设置支持Javascript
//启用支持javascript WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true);
添加js交互:
webView.addJavascriptInterface(new Object() { <span style="white-space:pre"> </span>// 打开照相机 @JavascriptInterface public void openCamera(String path) { pathAll = Tool.getPath(context) + "app_package/" + path; WebTool webTool = WebTool.getInstance(); webTool.openCamera(path, activity); } }, "androidApi");
其中,locationCallBack()是js的一个方法。
缓存,加载进度设置,见 http://www.cnblogs.com/tinyphp/p/3858997.html
webView回调的详情,参见
http://tool.oschina.net/uploads/apidocs/android/reference/android/webkit/WebView.html
http://blog.csdn.net/typename/article/details/39030091