Android WebView在Android平台上是一个特殊的View, 他能用来显示网页,这个类可以被用来在你的app中仅仅显示一张在线的网页,还可以用来开发浏览器。WebView内部实现是采用渲染引擎来展示view的内容,提供网页前进后退,网页放大,缩小,搜索,前端开发者可以使用web inspector(Android 4.4系统支持,4.4一下可以采用http://developer.android.com/guide/webapps/debugging.html)调试HTML,CSS,JavaScript等等功能。在Android 4.3系统及其一下WebView内部采用Webkit渲染引擎,在Android 4.4采用chromium 渲染引擎来渲染View的内容。
WebView的基本使用:
1.初始化控件,并添加访问网络的权限
private WebView base_webview;
private LinearLayout activity_main;
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件,加权限
initView();
}
private void initView() {
base_webview = (WebView) findViewById(R.id.base_webview);
activity_main = (LinearLayout) findViewById(R.id.activity_main);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
}
访问网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
2.加载网页,默认会跳到系统默认浏览器进行加载
base_webview.loadUrl("http://www.baidu.com");
3.为WebView添加主要处理解析,就是渲染网页等浏览器做的事情.
base_webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
4.与JS交互,使显示的网页能加载出图片,并且设置WebView支持缓存,优先使用缓存
//获取WebView的设置对象
WebSettings settings = base_webview.getSettings();
//使webView具备支持JS互调的能力
settings.setJavaScriptEnabled(true);
//设置WebView支持缓存 参数Load_yWebView优先使用缓存
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
5.添加WebView辅助处理JS,并使用ProgressBar来动态显示加载网页的进度条
//辅助WebView处理JS
base_webview.setWebChromeClient(new WebChromeClient() {
//处理进度条的监听方法,newProgress参数就是加载网页的进度值(当进度值为100的时候,表示加载网页完毕)
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
if (newProgress == 100) {
//当网页加载完毕时,隐藏ProgressBar
progressBar.setVisibility(View.GONE);
} else {
//加载网页中,显示ProgessBar,同事进度条的值动态显示
progressBar.setVisibility(View.VISIBLE);
progressBar.setProgress(newProgress);
}
}
});
6.最后复写onKeyDown方法,使程序实现当用户点击退出时,如果有上一层网页,返回上一层,如果没有则退出程序的功能.
//使用户按退出时,先是按层级退出网页,最后退出程序(如果没有这段代码,用户会直接退出程序)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//就复写手机上退出按钮的逻辑,改成我们自己的逻辑
if (keyCode == KeyEvent.KEYCODE_BACK){
//判断WebView还有没有上一个层级可以退出,如果有,就退出到上一个网页里
if (base_webview.canGoBack()){
base_webview.goBack();
return true;
//如果没有就关闭Activity
}else{
finish();
}
}
return super.onKeyDown(keyCode, event);
}
MainActivity布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/activity_main"
>
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"/>
<WebView
android:id="@+id/base_webview"
android:layout_width="match_parent"
android:layout_height="wrap_content"></WebView>
</LinearLayout>