WebView类直接继承于Android的布局类绝对布局AbsoluteLayout,这是由于绝对布局没有屏幕边框的缘故,这样加载Web网页时才能左右滑动,因为通常Web网页的宽度都是要远远大于手机屏幕的宽度的。该类还实现了两个监听器接口:ViewGroup.OnHierarchyChangeListener和

ViewTreeObserver.OnGlobalFocusChangeListener。前一个监听器包括两个事件方法:onChildViewAdded(View parent, View和onChildViewRemoved(View parent, View,这两个方法会分别在向WebView中添加或删除子控件时调用。后一个监听器只有一个事件方法:onGlobalFocusChanged(View oldFocus, View,该方法会在WebView中当前焦点位置发生变化时调用。当WebView由触摸模式切换为非触摸模式时,该方法的第一个参数oldFocus的值为null,当WebView由非触摸模式切换为触摸模式时,该方法的第二个参数newFocus的值为null。当WebView在单纯的非触摸模式(即没有两种模式之间的切换)下发生焦点的变化时,两个参数的值均可能为null。

使用了WebKit引擎来渲染网页,提供了对网页访问记录的前进和后退操作,网页放大和缩小操作以及文本搜索操作等。默认情况下,WebView并没有提供类似浏览器的功能,也没有开启对JavaScript脚本的支持,并且页面的错误也会被忽略掉。当加载网页仅仅只是展示信息而没有任何交互时,这是没有任何问题的。如果需要完整的浏览器功能,我们需要这样做:

Uri uri = Uri.parse("http://www.example.com"); 
     Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
     startActivity(intent);

WebView本身并不能提供类似浏览器的功能。

WebView的使用既可以在XML布局文件中配置,也可以在Activity的onCreate()方法中这样来使用:


WebView webview = new WebView(this); 
    setContentView(webview);

上面的代码把整个Activity的窗口空间设置为了WebView。然后像下面的代码所示来加载网页:

这是最简单的一种用法,需要注意的是,如果在加载网页的过程中

//产生了错误,将不会有任何的异常被抛出。
    webview.loadUrl("http://slashdot.org/");

也可以直接加载一段HTML代码

String summary = "<html><body>You scored <b>192</b> points.</body></html>";
    webview.loadData(summary, "text/html", null);

下面的代码展示了WebView的复杂一点的用法:


在标题栏中展示加载进度

getWindow().requestFeature(Window.FEATURE_PROGRESS);
 webview.getSettings().setJavaScriptEnabled(true); final Activity activity = this;
 webview.setWebChromeClient(new WebChromeClient() 
 {
通过WebChromeClient对象我们可以获取到网页加载的进度    //值,从而可以对加载网页的进度做出处理
   public void onProgressChanged(WebView view, int progress) 
   {
和WebView在进度的度量上单位不一样,因此           //这里需要做个转换。当进度达到100%时,进度条会自动消失
       activity.setProgress(progress * 1000);
   }
 }); webview.setWebViewClient(new WebViewClient() 
 {
通过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:///");