一、简介
WebView是一种控件,它基于webkit引擎,因此具备渲染Web页面的功能。
基于Webview的混合开发,就是在 Android os(安卓)/I os(苹果)原生APP里,通过WebView控件嵌入Web页面。
你手机里有淘宝软件吧?
就是外边是个原生APP的壳,内容是H5页面(基于html+css+js的Web页面)。现在的移动端混合开发软件,如果对于交互渲染要求不是特别高的项目,基本都是这么玩的。
二、示例
WebView的最简单的使用方式即是直接显示网页内容,有以下步骤:
1、AndroidManifest.xml 添加访问网络权限
<uses-permission android:name="android.permission.INTERNET"/>
2、在布局文件中添加WebView控件
<WebView
android:id="@+id/wv_webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
3、在代码中让WebView控件加载显示网页
public class WebViewActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
//获得控件
WebView webView = (WebView) findViewById(R.id.wv_webview);
//访问网页
webView.loadUrl("http://www.baidu.com");
//系统默认会通过手机浏览器打开网页,为了能够直接通过WebView显示网页,则必须设置
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//使用WebView加载显示url
view.loadUrl(url);
//返回true
return true;
}
});
}
}
运行效果如下:
三、API
1、加载URL
//方式1. 加载一个网页:
webView.loadUrl(“百度一下,你就知道“);
//方式2:加载apk包中的html页面
webView.loadUrl(“file:///android_asset/test.html”);
//方式3:加载手机本地的html页面
webView.loadUrl(“content://com.android.htmlfileprovider/sdcard/test.html”);
// 方式4: 加载 HTML 页面的一小段内容
WebView.loadData(String data, String mimeType, String encoding)
// 参数说明:
// 参数1:需要截取展示的内容
// 内容里不能出现 ’#’, ‘%’, ‘\’ , ‘?’ 这四个字符,若出现了需用 %23, %25, %27, %3f 对应来替代,否则会出现异常
// 参数2:展示内容的类型
// 参数3:字节码
2、WebView的状态
//激活WebView为活跃状态,能正常执行网页的响应
webView.onResume();
//当页面被失去焦点被切换到后台不可见状态,需要执行onPause()
//通过onPause()动作通知内核暂停所有的动作,比如DOM的解析、JavaScript执行等
webView.onPause();
//当应用程序(存在webview)被切换到后台时,这个方法不仅仅针对当前的webview而是全局的全应用程序的webview
//它会暂停所有webview的布局显示、解析、延时,从而降低CPU功耗
webView.pauseTimers()
//恢复pauseTimers状态
webView.resumeTimers();
//销毁Webview //在关闭了Activity时,如果Webview的音乐或视频,还在播放,就必须销毁Webview。
//但是注意:webview调用destory时,webview仍绑定在Activity上
//这是由于自定义webview构建时传入了该Activity的context对象
//因此需要先从父容器中移除webview,然后再销毁webview
rootLayout.removeView(webView);
webView.destroy();
3、前进、后退网页
//是否可以后退
Webview.canGoBack()
//后退网页
Webview.goBack()
//是否可以前进
Webview.canGoForward()
//前进网页
Webview.goForward()
//以当前的index为起始点前进或者后退到历史记录中指定的steps
//如果steps为负数则为后退,正数则为前进
Webview.goBackOrForward(intsteps)
常见用法:Back键控制网页后退
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
四、参考
- Carson带你学Android:最全面的Webview使用详解
- Android WebView 的使用(超详细用法)
- 图解WebView – (1) WebView概述
- 图解WebView – (2) WebView 常用API详解