Android开发之WebView详解
概述:
一个显示网页的视图。这个类是你可以滚动自己的Web浏览器或在你的Activity中简单地显示一些在线内容的基础。它使用了WebKit渲染引擎来显示网页,包括向前和向后导航的方法(通过历史记录),放大和缩小,执行文本搜索等。
需要注意的是:为了让你的应用能够使用WebView访问互联网和加载网页,你必须添加Internet的权限在Android Manifest文件中:
[html] view plaincopy在CODE上查看代码片派生到我的代码片
类结构:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.AbsoluteLayout
↳ android.webkit.WebView
常用方法:
PublicMethods
WebSettings
getSettings()
获取设置WebView的WebSettings对象。
void
setWebViewClient(WebViewClient client)
设置将接收各种通知和请求的WebViewClient。
void
setWebChromeClient(WebChromeClient client)
设置chrome处理。
说明:
WebSettings getSettings()获取设置WebView的WebSettings对象。
WebSettings常用方法:
方法
说明
setAllowFileAccess
启用或禁用WebView访问文件数据
setBlockNetworkImage
是否显示网络图像
setBuiltInZoomControls
设置是否支持缩放
setCacheMode
设置缓冲的模式
setDefaultFontSize
设置默认的字体大小
setDefaultTextEncodingName
设置在解码时时候用的默认编码
setFixedFontFamily
设置固定使用的字体
setJavaScriptEnabled
设置是否支持Javascript
setLayoutAlgorithm
设置布局方式
setLightTouchEnabled
设置用鼠标激活被选项
setSupportZoom
设置是否支持变焦
void setWebViewClient(WebViewClient client)
设置将接收各种通知和请求的WebViewClient。
WebViewClient 常用方法:
方法
说明
doUpdateVisitedHistory
更新历史记录
onFormResubmission
应用程序重新请求网页数据
onLoadResource
加载指定地址提供的资源
onPageFinished
网页加载完毕
onPageStarted
网页开始加载
onReceivedError
报告错误信息
onScaleChanged
WebView发生改变
shouldOverrideUrlLoading
控制新的连接在当前WebView中打开
void setWebChromeClient(WebChromeClient client) 设置chrome处理。
WebChromeClient常用方法:
方法
说明
onCloseWindow
关闭WebView
onCreateWindow
创建WebView
onJsAlert
处理Javascript中的Alert对话框
onJsConfirm
处理Javascript中的Confirm对话框
onJsPrompt
处理Javascript中的Prompt对话框
onProgressChanged
加载进度条改变
onReceivedlcon
网页图标更改
onReceivedTitle
网页Title更改
onRequestFocus WebView
显示焦点
自定义WebView,你可以添加你自己的行为:
创建和设置WebChromeClient子类。当一些可能影响浏览器的用户界面发生了,例如,进度更新和JavaScript警报送到这里(见调试任务)调用这个类。
创建和设置WebViewClient子类。当影响内容呈现的事情发生是调用这个类,例如,错误或表单提交。您也可以拦截的URL加载到这里(通过shouldOverrideUrlLoading())。
修改WebSettings,如以setJavaScriptEnabled()方式启用JavaScript。
将Java对象通过addJavascriptInterface(Object,String)方法注射到WebView。 这方法允许您将Java对象注入到一个页面的JavaScript上下文,这样他们可以通过JavaScript访问的页面。
下面是一个更加复杂的例子,显示错误处理,设置和进展通知:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
// Let’s display the progress in the activity title bar, like the
// browser appdoes.
getWindow().requestFeature(Window.FEATURE_PROGRESS);
webview.getSettings().setJavaScriptEnabled(true);
final Activity activity = this;
webview.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
//Activities and WebViews measure progress with different scales.
//The progress meter will automatically disappear when we reach 100%
activity.setProgress(progress * 1000);
}
});
webview.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(activity, “Oh no! ” + description, Toast.LENGTH_SHORT).show();
}
});
webview.loadUrl(“http://developer.android.com/“);
缩放:
可以通过 设置 WebSettings.setBuiltInZoomControls(boolean) ,启用内置缩放。
注意:使用缩放,如果不是高度或宽度设置为WRAP_CONTENT可能会导致不确定的行为,应该避免。
Cookie 和窗口管理:
出于显而易见的安全原因,您的应用程序都有自己的缓存,cookie存储等,它不共享浏览器应用程序的数据。
默认情况下,通过HTML请求打开新的窗口将被忽略。这是确切的它们是被JavaScript打开还是被目标链接打开。您可以自定义您的WebChromeClient提供自己的行为打开多个窗口,并使用你想要的任何方式渲染它们。
WebView中构建Web应用程序:
如果你想提供一个Web应用程序(或只是一个网页)作为客户端应用程序的一部分,你可以使用WebView做到这一点。WebView类是Android的View类的一个扩展,它可以让你显示网页作为你的活动布局的一部分。它不包括一个完全开发的Web浏览器的任何功能,如导航控件或一个地址栏。所有的WebView默认情况下是显示一个Web页面。
一个使用WebView的常见的场景:是当你想要在你的应用程序中提供可能需要更新的信息,如一个终端用户协议或用户指南,那么使用WebView是很有帮助的。 在你的Android应用程序中你可以创建一个包含WebView的Activity然后用它来显示的在线托管的文档。
另一个使用WebView的常见的场景:是如果你的应用程序提供的数据总是需要从Internet上获取,如电子邮件。在这种情况下,你可能会发现它更容易在你的Android应用程序,显示所有的用户数据的网页,而不是执行一个网络请求,然后解析数据,并渲染它在Android的布局,以建立一个WebView。相反,你可以设计的专为Android设备的网页,然后实施的WebView在你的Android应用程序加载的网页。
下面将向你展示如何开始使用WebView,以及如何做一些额外的事情,比如在你的Android应用程序中处理页面导航和从网页上绑定JavaScript到客户端的代码。
基本用法:
默认情况下,WebView不提供类似浏览器的窗口小部件,不启用JavaScript和网页错误被忽略。如果你的目的只是显示一些HTML作为用户界面的一部分,这也许还不错;用户将不再需要与网页进行交互阅读,并且该网页将不需要与用户进行交互。如果你需要一个全面的Web浏览器,那么你可能要调用浏览器应用程序来加载URL,而不是用WebView中显示它。例如:
1) 在你的APP中添加一个WebView:
[html] view plaincopy在CODE上查看代码片派生到我的代码片