WebView的分析与使用
2016-05-24 11:36
561 查看
在Android中加载网页就要使用到了WebView,它是基于WebKit渲染引擎,而在最新的Android4.4起,WebView开始基于Chromium。 在我们使用WebView中,会用到最多的就是WebSettings,WebViewClient,WebChromeClient这三项,使用这三项可以帮助我们解决浏览网页中的绝大多数问题。
1 WebSettings
使用webView加载网页的时候,我们可以使用 WebSettings来对网页的加载进行一些定制,例如设置缩放网页,是否加载图片等定制功能。在WebView对象被创建时WebSettings对象也会被同时创建,并附有默认的settings值。WebSettings的生命周期同WebView生命周期相同,如果WebView被destroy 则WebSettings应该被释放,否则如果使用WebSettings继续再操作的话, 会抛出异常IllegalStateException。WebSettings settings = webView.getSettings();WebSettings对象可以通过WebView.getSettings()获得。 WebSettings 的api详解:
settings.setBlockNetworkImage(boolean flag);设置网页浏览为无图模式。true为无图模式。
settings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
设置网页的默认缩放。可设置的值有ZoomDensity.FAR ,ZoomDensity.MEDIUM , ZoomDensity.CLOSE .是根据不同的屏幕分辨率来进行设置,不过在最新的api中已经过时了。
settings.setUseWideViewPort(boolean flag);设置可以缩放,api说明中用这个替代了setDefaultZoom.
settings.setLoadWithOverviewMode(boolean flag);设置网页适应webView的大小。一般与setUseWideViewPort(true);一起使用。
settings.setCacheMode(int mode);设值缓存的类型。 一个普通网页的加载cache会被检查,内容也会被重新校验,第一次访问网页时,会存储cache到本地,设置策略可以让网页加载方式发生变化,cache模式有如下几种: LOAD_DEFAULT: 如果我们应用程序没有设置任何cachemode, 这个是默认的cache方式。 加载一张网页会检查是否有cache,如果有并且没有过期则使用本地cache,否则 从网络上获取。 LOAD_CACHE_ELSE_NETWORK: 使用cache资源,即使过期了也使用,如果没有cache才从网络上获取。 LOAD_NO_CACHE: 不使用cache 全部从网络上获取。 LOAD_CACHE_ONLY: 只使用cache上的内容。
settings.setJavaScriptEnabled(boolean flag);设置网页允许脚本。
settings.setAppCacheEnabled(boolean flag);设置允许html5缓存。设置html5缓存路径。 settings.setDatabaseEnabled(boolean flag);设置启用数据库,用于离线缓存。
settings.setAllowFileAccess(boolean flag));设置允许访问文件。
settings.setUserAgentString(String ua);设置浏览器标识。
settings.setSaveFormData(boolean save);settings.setSavePassword(boolean save);设置保存用户表单,保存密码。
2 WebViewClient
webViewClient用来帮助webView处理各种通知和请求事件的。例如当页面开始加载,和加载完毕的时候。void onLoadResource(WebView view, String url)在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。
void onPageStarted(WebView view, String url, Bitmap favicon)在页面加载开始时调用。
void onPageFinished(WebView view, String url)在页面加载完成时调用。
boolean shouldOverrideUrlLoading(WebView view, String url)在点击请求是链接的时候才调用,return true表示在当前webView打开链接。
WebResourceResponse shouldInterceptRequest(WebView view, String url)在处理webView时,需要拦截或替换某些链接可以用到这个方法。这个请求是在非ui线程。 shouldInterceptRequest有两种重载。 public WebResourceResponse shouldInterceptRequest (WebView view, String url)从API 11开始引入,API 21弃用 public WebResourceResponse shouldInterceptRequest (WebVid859ew view, WebResourceRequest request) 从API 21开始引入
void onReceivedHttpAuthRequest(WebView view,final HttpAuthHandler handler, final String host, final String realm)通知应用程序WebView接收到了一个Http auth的请求,应用程序可以使用supplied 设置webview的响应请求。默认行为是cancel 本次请求。
void onReceivedSslError(WebView view, final SslErrorHandler handler,SslError error)当网页加载资源过程中发现SSL错误会调用此方法。我们应用程序必须做出响应,是取消请求handler.cancel(),还是继续请求handler.proceed();内核的默认行为是handler.cancel();SslError.SSL_UNTRUSTED:网站证书没有可信任的发行者。SslError.SSL_IDMISMATCH:站点名和证书不匹配。SslError.SSL_EXPIRED:证书已经过期。
SslError.SSL_NOTYETVALID:证书没有验证。
3 WebChromeClient
WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等。<span style="font-family:SimSun;font-size:12px;">void onProgressChanged(WebView view, int newProgress)</span>通知应用程序当前网页加载的进度。
<span style="font-size:12px;">void onReceivedIcon(WebView view, Bitmap icon)</span>当页面接收到icon的时候调用。
void onReceivedTitle(WebView view, String title)当接收到Title的时候调用。
boolean onCreateWindow(WebView view, final boolean dialog, final boolean userGesture, final Message resultMsg)请求创建一个新的窗口。
void onShowCustomView(View view, CustomViewCallback callback)在webView中播放视频时用到,当需要全屏一个视频时,重写这个方法。
void onHideCustomView()退出视频时使用。
相关文章推荐
- android WebView组件使用总结
- 解决video标签在安卓webview下无法自动播放问题
- Android webview与js交换JSON对象数据示例
- android中WebView和javascript实现数据交互实例
- Android的webview支持HTML5的离线应用功能详细配置
- Android开发之WebView组件的使用解析
- Android中实现Webview顶部带进度条的方法
- Android WebView控件捕获用户输入的信息
- Android中访问证书有问题的SSL网页的方法
- 基于Android中Webview使用自定义的javascript进行回调的问题详解
- Android webview用法实例简析
- Android编程实现WebView自适应全屏方法小结
- Android编程使WebView支持HTML5 Video全屏播放的解决方法
- Android使用WebView播放flash的方法
- Android中WebView无法后退和js注入漏洞的解决方案
- Android编程实现WebView全屏播放的方法(附源码)
- android webview 中localStorage无效的解决方法
- Android使用原生组件WebView加载网页和数据的方法
- Android自定义 WebView浏览器
- android webview 简单浏览器实现代码