WebView 类介绍

WebView


java.lang.Object
-android.view.View
--andorid.view.ViewGroup
---android.widget.AbsoluteLayout
----android.webkit.WebView



OverView

一个展示网页的View,这是一个基础类,是您可以使用自己的Web浏览器或简单的展示你activity中的一些在线内容。它使用了WebKit渲染引擎,包括了一下方法:向前向后历史导航、缩放、进行文字搜索等等。


注意,为了使您在activity中嵌入的webview能够访问网络和加载网页信息,你必须在AndroidMenifest文件中加入INTERNET权限。
<uses-permission android:name="android.permission.INTERNET" />
更多信息请参阅Build Web App in WebView http://developer.android.com/guide/webapps/webview.html


Basic usage

默认的,一个WebView提供了一个类似浏览器的控件,不支持javascript和忽略了网页错误信息。如果你的目标仅仅是在你的UI中展示一些HTML,WebView的功能足以;用户除了读页面以外不需要与网页交互,网页也不需要与用户交互。如果你真想要一个成熟的浏览器,那么你可能想要使用URL Intent调用Browser应用而不是简单的WebView中展示。例如:

 Uri uri = Uri.parse("http://www.example.com");
 Intent intent = new Intent(Intent.ACTION_VIEW, uri);
 startActivity(intent);
 
 在你自己的activity中使用,在layout中布局一个,或者在onCreate方法中把整个activity窗口设置成webView
 
  WebView webview = new WebView(this);
  setContentView(webview);
  

然后Load你想要的网页:


 // Simplest usage: note that an exception will NOT be thrown
 // if there is an error loading this page (see below).
 webview.loadUrl("http://slashdot.org/");


 // OR, you can also load from an HTML string:
 String summary = "<html><body>You scored <b>192</b> points.</body></html>";
 webview.loadData(summary, "text/html", null);
 // ... although note that there are restrictions on what this HTML can do.
 // See the JavaDocs for loadData() and loadDataWithBaseURL() for more info.
 
 一个WebView具有一些可自定义的地方让你加入自己的行为,例如:
 
 ※创建并设置一个WebChromeClient子类,当某些可以影响你浏览器UI的事件发生时就会调用这个类。例如:进度条更新和JavaScript弹出框出现
 ※创建病设置一个WevViewClient子类,当某些影响到你内容渲染的东西出现时会被调用,例如:错误和表单表单提交,你也可以通过shouldOverrideUrlLoading
 ※修改WebSetting,例如:使用setJavascriptEnabled()方法启用JavaScript
 ※使用addJavascriptInterface(Object string)方法将java对象注入到WebView,这个方法允许你将java对象注入到一个网页的javascript context中,这样就可以在网页的javascript中访问了。


 一下是一些比较复杂的例子,展示了 错误处理,设置,和进度提示

 // Let's display the progress in the activity title bar, like the
 // browser app does.
 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/"); 
 

 Zoom

 启用内置缩放,可以调用 WebSettings.setBuiltInZoomControls(boolean)使用缩放时如果高度或宽度设置为WRAP_CONTENT可能会导致未定义的行为,应该避免。
 

 Cookies and window management

 因为明显的安全原因,你的app具有他自己的缓存、cookies存储等。他不能共享Browser的数据 默认的,HTML发出的打开新的窗口的请求是禁止的,包含javascript打开的和超链接标签打开的。你可以自定义你的WebChromeClient提供自己的行为打开多个窗口,用任何你想要的方式去渲染他们
 

 Build web page to support different screen densities

 一个设备的屏幕密度是基于设备的屏幕分辨率。一个低密度的屏幕,每英寸可用像素比较少,反之高密度的屏幕每英寸可用像素多。品目密度比较重要,在其他条件一样的情况下,一个宽和高固定像素的UI控件,在低密度屏上看上去比较大而在高密度屏上显示的比较小,为简单起见,android把所有的各种密度的屏幕区分为广义的三红密度:高,中,低
 
 默认情况下,WebView会按中密度的显示效果缩放一个网页,所以,他会在高密度屏幕上做一个1.5倍的扩大,而在低密度屏幕上做一个0.75倍的缩小。从2.0开始,webview支持DOM,CSS,和meta标签,来帮助你适配不同密度的屏幕。
 
 一下是一个特征的总结,来帮助你处理不同的屏幕分辨率:
 
 ※ window.devicePixelRatio DOM属性。这个属性的值指定了在这个屏幕上默认缩放规格。举个例子来说,如果 window.devicePixelRatio  的值为1.0,设备被人为是中密度屏幕,网页不会执行默认的缩放;如果值为1.5,设备被认为是高密度屏,会执行1.5倍的缩放;如果值为0.75,则被认为为低密度屏,则进行0.75倍的缩放。
 ※-webkit-device-pixel-ratio CSS属性的媒体查询。它指定了屏幕密度,以及哪一个属性栏要适用于这个屏幕密度。对应的值应该是0.75、1或者1.5,指定了属性将适用于中密度、高密度、低密度设备。例如:
 <link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio:1.5)" href="hdpi.css" />
   以上的hdpi.css文件仅仅适用于高密度屏幕
 

 HMTL5 Video support

 为了支持应用程序内嵌HTML5,你需要打开硬件加速和设置一个WebChromeClient。为了支持全屏, onHideCustomView()和onShowCustomView(View, WebChromeClient.CustomViewCallback)必须需要被实现, getVideoLoadingProgressView() 可选
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值