当需要打开一个URL时,常规操作是用系统浏览器打开,很方便、便捷,不足之处就是只能显示,无法交互。使用SDK提供的WebView可以解决这一点,自然也需要多做一些额外的工作。
1. 简介
简单说,WebView就是一个具备基础功能浏览器,不想市面上的浏览器那样,加入了各种定制化功能。其内部基于webkit引擎,低版本和高版本采用了不同的webkit版本内核,4.4后使用了Chrome内核。而webkit又是什么呢?它是一个开源的web浏览器引擎,即浏览器内核。当我们请求一个URL后,服务器返回来的是一个个文件,如html,css,等,浏览器的工作,就是把这些文件渲染成易读的形式展现给我们,不同的形式、不同的颜色、不同的交互,等。关于简介,就说这么多。
2. 使用
- 创建
作为一个控件,和其他控件一样,可以在布局文件中声明,后在使用时代码中获取。也可以在代码中直接创建,然后添加到布局中 - 基本方法
1
2
3
4
5
6
7
8
9
10
11
12// 同步页面状态到webview,使其可以正常响应,同时在不需要的时候暂停一些动作节省系统资源,如DOM解析,JS执行等
webView.onResume();
webView.onPause();
// 暂停webview的layout,parsing,jstimer
// 这是针对全局的,而不单单是当前的webview
webView.pauseTimers();
webView.resumeTimers();
// 避免webview在销毁时还在加载导致泄漏,如音乐或视频,所以先将其移出,再执行销毁
rootLayout.removeView(webView);
webView.destroy(); - 前进后退按下返回键时,Activity会先消费掉此事件,而退出页面,若想按下返回执行webView的后退操作,则需要传递事件给WebView
1
2
3
4
5
6webView.canGoBakc();
webView.goBack();
webView.canGoForward();
webView.goForward();
// 负数后退,正数则前进
webView.goBackOrForwardd(int steps);1
2
3public void onBackPressed() {
webView.goBack();
} - 清除
1
2
3
4
5
6
7// 内核缓存是全局的,所以该操作针对的是全局应用
webView.clearCache(true);
// 访问记录
webView.clearHistory();
webView.clearFormData();
3. 常用类之WebSettings
用来配置一些和webkit内核相关的属性
1 | WebSettings settings = webView.getSettings(); |
4. 常用类之WebViewClient
主要用来设定WebView的通知、请求事件,如
1 | onLoadResource |
5. 常用类之WebChromeClient
主要用来辅助WebView处理对话框、网站图标、标题,加载进度等,如
1 | onCloseWindow |