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:///");
















