Android Webview 详解

一   简介


一个基于webkit引擎、展现web页面的控件

  • Android 4.4前:Android Webview在低版本 & 高版本采用了不同的webkit版本的内核
  • Android 4.4后:直接使用了Chrome内核


1.1 作用

  • 在 Android 客户端上加载h5页面
  • 在本地 与 h5页面实现交互 & 调用
  • 其他:对 url 请求、页面加载、渲染、对话框 进行额外处理。


二  具体使用


Webview的使用主要包括:Webview类 及其 工具类(WebSettings类、WebViewClient类、WebChromeClient类)

类名 作用 常用方法
Webview
  • 创建对象
  • 加载URL
  • 生命周期管理
  • 状态管理
  • loadUrl():加载网页
  • goBack():后退
WebSettings 配置 & 管理 WebView
  • 缓存:setCacheMode()
  • 与js交互:setJavaScriptEnabled()
WebViewClient 处理各种通知 & 请求事件
  • shouldOverrideUrlLoading():打开网页时WebView显示
  • onPageStarted():载入页面调用(如加载速度)
  • onPageFinished():页面结束时调用
WebChromeClient 辅助WebView处理JS对话框(如 网站图标、网站标题)
  • onProgressChanged():获得网页的加载进度 & 显示
  • onReceivedTitle():获得Web页中的标题
  • onJsAlert():支持JS的警告框
  • onJsConfirm():支持JS的确认框
  • onJsPrompt():支持JS的输入框

2.1 Webview常用方法 


2.1.1 WebView的状态
//激活WebView为活跃状态,能正常执行网页的响应
webView.onResume() ;
 
//当页面被失去焦点被切换到后台不可见状态,需要执行onPause
//通过onPause动作通知内核暂停所有的动作,比如DOM的解析、plugin的执行、JavaScript执行。
webView.onPause();
 
//当应用程序(存在webview)被切换到后台时,这个方法不仅仅针对当前的webview而是全局的全应用程序的webview
//它会暂停所有webview的layout,parsing,javascripttimer。降低CPU功耗。
webView.pauseTimers()
//恢复pauseTimers状态
webView.resumeTimers();
 
//销毁Webview
//在关闭了Activity时,如果Webview的音乐或视频,还在播放。就必须销毁Webview
//但是注意:webview调用destory时,webview仍绑定在Activity上
//这是由于自定义webview构建时传入了该Activity的context对象
//因此需要先从父容器中移除webview,然后再销毁webview:
rootLayout.removeView(webView); 
webView.destroy();
2.1.2 关于前进 / 后退网页
//是否可以后退
Webview.canGoBack() 
//后退网页
Webview.goBack()
 
//是否可以前进                     
Webview.canGoForward()
//前进网页
Webview.goForward()
 
//以当前的index为起始点前进或者后退到历史记录中指定的steps
//如果steps为负数则为后退,正数则为前进
Webview.goBackOrForward(intsteps) 


常见用法:Back键控制网页后退

  • 问题:在不做任何处理前提下 ,浏览网页时点击系统的“Back”键,整个 Browser 会调用 finish()而结束自身
  • 目标:点击返回后,是网页回退而不是推出浏览器
  • 解决方案:在当前Activity中处理并消费掉该 Back 事件
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KEYCODE_BACK) && mWebView.canGoBack()) { 
        mWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

2.1.3 清除缓存数据
//清除网页访问留下的缓存
//由于内核缓存是全局的因此这个方法不仅仅针对webview而是针对整个应用程序.
Webview.clearCache(true);
 
//清除当前webview访问的历史记录
//只会webview访问历史记录里的所有记录除了当前访问记录
Webview.clearHistory();
 
//这个api仅仅清除自动完成填充的表单数据,并不会清除WebView存储到本地的数据
Webview.clearFormData();

2.1.4 使用 WebView 加载网页 
//加载网页链接
webView.loadUrl("http://keithxiaoy.com");
//加载本地assets目录下的网页
webView.loadUrl("file:///android_asset/keithxiaoy.html");
//加载手机本地的html页面
webView.loadUrl("content://com.android.htmlfileprovider/sdcard/keithxiaoy.html");
//加载 HTML 页面的一小段内容。参数1:需要截取展示的内容、参数2:展示内容的类型、参数3:字节码
webView.loadData(String data, String mimeType, String encoding)


 

2.2 常用类


2.2.1 WebSettings类
  • 作用:对WebView进行配置和管理
  • 配置步骤 & 常见方法:

配置步骤1:添加访问网络权限(AndroidManifest.xml)

<uses-permission android:name="android.permission.INTERNET"/>


配置步骤2:生成一个WebView组件(有两种方式)

//方式1:直接在在Activity中生成
WebView webView = new WebView(this)
 
//方法2:在Activity的layout文件里添加webview控件:
WebView webview = (WebView) findViewById(R.id.webView1);


配置步骤3:进行配置-利用WebSettings子类(常见方法)

//声明WebSettings子类
WebSettings webSettings = webView.getSettings();
 
//如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
webSettings.setJavaScriptEnabled(true);  
 
//支持插件
webSettings.setPluginsEn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北海屿鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值