Android中WebView使用详解

来源:互联网 发布:用友t6软件 编辑:程序博客网 时间:2024/06/05 21:14

一、 什么是WebView

 WebView是Android内置的可以显示网页的控件。可以理解成一个简易版的浏览器。目前很多android app都内置了可以显示web页面的界面,这个界面的核心组件就是WebView,学习该组件可以为你的app开发提升扩展性。

WebView的优点:
1、可以直接显示和渲染web页面,直接显示网页
2、webview可以直接用html文件(网络上或本地assets中)作布局
3、和JavaScript交互调用
4、更新内容只需要更新后台即可,而不需要用户升级App

二、 WebView基本使用

1、 在xml布局文件中配置WebView控件
< Webview
android:layout_width=”match_parent”
android:layout_height=”match_parent” >
< /Webview>
2、 使用WebView加载网页
webview = (WebView) findViewById(R.id.webView1);
//加载指定的Url
webview.loadUrl(“https://www.baidu.com/“);
注意:上面的代码会直接打开系统的本地浏览器,用本地的浏览器来加载网页。
3、 解决上面的问题需要给WebView设置WebViewClient对象,并覆写他的相应方法。
这里写图片描述

注意:
1) 上面方法的参数2是这次加载的Url。每加载一次Url都会回调一次该方法。
2) 返回true,则是给当前的app一个机会去处理url,当前的WebView则不会加载这个url。如果是返回false,则是当前的WebView会去主动处理这个url。
3) 该方法父类中默认返回是false,所以如果是仅仅让WebView自己去处理Url,则无需覆写该方法。仅设置WebViewClient对象即可。

三、 WebView一些相关Api

1、 WebView默认不支持JavaScript(Google开发人员脑袋进水了?)。但是一般情况下网页都会用到JavaScript。这样WebView就可以和Js进行交互了。
这里写图片描述
2、 设置是否支持缩放。
这里写图片描述
3、 后退:
这里写图片描述
4、 是否能后退:
这里写图片描述
5、 前进:
这里写图片描述
6、 是否能前进:
这里写图片描述
7、 放大(in)缩小(out)网页
这里写图片描述
8、 重新加载数据
这里写图片描述
9、 停止加载(页面所有内容都会停止加载)
这里写图片描述

四、 WebView的事件回调

Android WebView 做为承载网页的载体控件,他在网页显示的过程中会产生一些事件,并回调给我们的应用程序,以便我们在网页加载过程中做应用程序想处理的事情。比如说客户端 需要显示网页加载的进度、网页加载发生错误等等事件。 WebView提供两个事件回调类给应用层,分别为WebViewClient,WebChromeClient 开发者可以继承这两个类,接手相应事件处 理。WebViewClient 主要提供网页加载各个阶段的通知,比如网页开始加载onPageStarted,网页结束加载onPageFinished 等;WebChromeClient主要提供网页加载过程中提供的数据内容,比如返回网页的title,favicon等。

4.1 WebViewClient

这里写图片描述
1、 public boolean shouldOverrideUrlLoading(WebView view, String url)
当加载的网页需要重定向的时候就会回调这个函数告知我们应用程序是否需要接管控制网页加载,如果应用程序接管,并且return true意味着主程序接管网页加载,如果返回false让webview自己处理。

参数说明:
@param view 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。
@param url 即将要被加载的url
@return true 当前应用程序要自己处理这个url, 返回false则不处理。
注意:
(1) 当请求的方式是”POST”方式这个方法不会被回调。
(2) 当我们访问的地址需要我们应用程序自己处理的时候,可以在这里截获,比如我们发现跳转到的是一个market的链接,那么我们可以直接跳转到应用市场,或者其他app。

2、 public void onPageStarted(WebView view, String url, Bitmap favicon)
当内核开始加载访问的url时,会通知应用程序,对每个main frame这个函数只会被调用一次,页面包含iframe 或者framesets 不会另外调用一次onPageStarted,当网页内内嵌的frame 发生改变时也不会调用onPageStarted。
3、 public void onPageFinished(WebView view, String url)
内容加载结束之后回调该方法。
4、 public void onLoadResource(WebView view, String url)
即将加载Url指定的资源。在页面中每个图片都是一个资源,所以一般情况下这个方法会调用次数比较多。
5、 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
发生错误时的回调方法。 我们可以在这里自定义错误页面。

更详细介绍参考博客:
http://blog.csdn.net/typename/article/details/39495409

4.2 WebChromeClient

WebChromeClient主要提供网页加载过程中提供的数据内容,比如返回网页的title,favicon等。
1、 public void onProgressChanged(WebView view, int newProgress)
通知应用程序当前网页加载的进度。
2、 public void onReceivedTitle(WebView view, String title)
当网页的Title发送变化时回调该方法
这个函数调用时机不确定,有可能很早,有可能很晚,取决于网页把title设置在什么位置,大多数网页一般把title设置到页面的前面,因此很多情况会比较早回调到这个函数。
3、 public void onReceivedIcon(WebView view, Bitmap icon)
当网站有新的图标时回调该方法。 参数二就是那个新的图标

五、 WebView加载本地页面

5.1 加载Html形式的字符串

这里写图片描述

5.2 加载Html页面

1、加载assets文件夹下的网页
这里写图片描述
2、加载sd卡上的网页(注意文件路径一定要正确)
这里写图片描述

1 0
原创粉丝点击