webview是Android中用来加载网页的一个组件。有一定开发基础的Android程序员应该都是很熟悉这个组件的。有时候我们可能直接使用webview,有时候我们喜欢使用类似AgentWeb之类的三方框架。这里我总结一下webview的一些相关常用方法。今后不论怎么使用webview,这些常用方法都是必不可少的。
1.webview的常用方法
- loadUrl:加载指定的URL,URL可以是HTTP打头的 外部网址,也可以是file打头的资产网页。
- getSettings:获取浏览器的网页设置信息。返回一个网页设置WebSettings对象。
- addJavascriptInterface:添加供JavaScript调用的App接口。
- setWebViewClient:设置网页视图的网页浏览客户端WebViewClient,如果已调用loadUrl方法,就必须同时调用本方法。
- setWebChromeClient:设置浏览器的网页交互客户端WebChromeClient。
- setDownloadListener:设置文件下载监听器DownloadListener。
- loadData:加载文本数据。第二个参数表示媒体类型,如text/html;第三个参数表示数据的编码格式,如base64表示采用BASE64编码,其余值(包括null)表示URL编码。
- canGoBack:判断页面能否返回。
- goBack:返回上一个页面。
- canGoForward:判断页面能否前进。
- goForward:前进到下一个页面。
- reload:重新加载页面。
- stopLoading:停止加载页面。
2.webSettings的常用方法
<1>基本的加载设置
- setLoadsImagesAutomatically:设置是否自动加载图片。如果设置为false,就表示无图模式。
- setDefaultTextEncodingName:设置默认的文本编码,如UTF-8、GBK等。
- setJavaScriptEnabled:设置是否支持JavaScript。
- setJavaScriptCanOpenWindowsAutomatically:设置是否允许JavaScript自动打开新窗口,即JS的window.open方法是否适用。
<2>与网页适配有关的设置
- setSupportZoom:设置是否支持页面缩放。
- setBuiltInZoomControls:设置是否出现缩放工具。
- setUseWideViewPort:当容器超过页面大小时,是否将页面放大到塞满容器宽度的尺寸。
- setLoadWithOverviewMode:当页面超过容器大小时,是否将页面缩小到容器能够装下的尺寸。
- setLayoutAlgorithm:设置自适应屏幕的算法,一般是LayoutAlgorithm.SINGLE_COLUMN。如果不设置,Android4.2.2及之前的版本就可能出现表格错乱的情况。
<3>与存储有关的设置
- setAppCacheEnabled:设置是否启用App缓存。
- setAppCachePath:设置App缓存文件的路径。
- setAllowFileAccess:设置是否允许访问文件,如WebView访问SD卡的文件。
- setDatabaseEnabled:设置是否启用数据库。
- setDomStorageEnabled:设置是否启用本地存储。
- setCacheMode:设置使用的缓存模式。缓存模式的取值见下表
WebSettings类的缓存模式 | 说明 |
LOAD_CACHE_ELSE_NETWORK | 优先使用缓存 |
LOAD_NO_CACHE | 不使用缓存 |
LOAD_CACHE_ONLY | 只使用缓存 |
3.webViewClient的常用方法
- onPageStarted:页面开始加载时触发。可在此弹出进度对话框ProgressDialog。
- onPageFinished:页面加载结束时触发。可在此关闭进度对话框。
- onReceivedError:收到错误信息时触发。
- onReceivedSslError:收到SSL错误时触发。
- shouldOverrideUrlLoading:发生网页跳转时触发。重写该方法的目的是判断每当点击网页中的链接时,是想在当前的网页视图里跳转还是跳转到系统自带的浏览器。
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
这里也可以选择让他跳转一个我们封装好的WebView页面,把地址传入,仿原生跳转。
4.webChromeClient的常用方法
- onReceivedTitle:收到页面标题时触发。
- onProgressChanged:页面加载进度发生变化时触发。可在此刷新进度对话框的进度条。
- onJsAlert:网页的JS代码调用alert方法时触发。可在此弹出自定义的提示对话框。
- onJsConfirm:网页的JS代码调用confirm方法时触发。可在此弹出自定义的确认对话框。
- onJsPrompt:网页的JS代码调用prompt方法时触发。可在此弹出自定义的提示对话框。
- onGeolocationPermissionsShowPrompt:网页请求定位权限时触发。可在此弹出一个确认对话框,提示用户是否允许网页获得定位权限。如果不想出现弹框就允许网页获得权限。
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onGeolocationPermissionsShowPrompt(String origin,GeolocationPermissions.Callback callback) {
//不弹框允许网页获得定位权限
callback.invoke(origin,true,false);
super.onGeolocationPermissionsShowPrompt(origin, callback);
}
});
5.DownloadListener的常用方法
- onDownloadStart:文件开始下载触发。可在此接管下载动作,比如设置文件下载的方式,文件的保存路径等。