在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件
在activity的布局文件中加上一个WebView组件。
<WebView
android:id="@+id/wv"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</WebView>
在activity的class中定义一个private的WebView变量。
private WebView webview=null;
在activity的onCreate事件中,添加一下代码:
webview=(WebView)findViewById(R.id.wv);
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("http://www.baidu.com");
webview.setWebViewClient(new MyWebViewClient());
覆盖方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack(); //goBack()表示返回WebView的上一页面
return true;
}
return super.onKeyDown(keyCode, event); //如没有这句。就不能回退activity了。
}
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
WebView在开发过程中应该注意几点:
1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。
WebSettings webSetting=webview.getSettings();
webSetting.setJavaScriptEnabled(true);
3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖webview的WebViewClient对象。
mWebView.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url){
view.loadUrl(url);
return true;
});
4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网?页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。
public boolean onKeyDown(int keyCode,KeyEvent event){
if((keyCode==KeyEvent.KEYCODE_BACK)&&mWebView.canGoBack()){
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode,event);
}
5.如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点。
webview.requestFocusFromTouch();
6.WebView加载界面主要调用三个方法:
LoadUrl、LoadData、LoadDataWithBaseURL.
1、LoadUrl直接加载网页、图片并显示.(本地或是网络上的网页、图片、gif)
2、LoadData显示文字与图片内容?(模拟器1.5、1.6)
3、LoadDataWithBase显示文字与图片内容(支持多个模拟器版本)
WebSettings的常用方法
setJavaScriptEnabled(true);支持js
setPluginsEnabled(true);支持插件
setUseWideViewPort(false);将图片调整到适合webview的大小
setSupportZoom(true);支持缩放
setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);支持内容从新布局
supportMultipleWindows();多窗口
setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);关闭webview中缓存
setAllowFileAccess(true);设置可以访问文件
setNeedInitialFocus(true);当webview调用requestFocus时为webview设置节点
setJavaScriptCanOpenWindowsAutomatically(true);支持通过JS打开新窗口
setLoadsImagesAutomatically(true);支持自动加载图片
WebViewClient 的方法
doUpdateVisitedHistory(WebView view,String url,boolean isReload)更新历史记录
onFormResubmission(WebView view,Message dontResend,Message resend) 应用程序重新请求网页数据
onLoadResource(WebView view,String url) 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次
onPageStarted(WebView view,String url,Bitmap favicon)这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。
onPageFinished(WebView view,String url)在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关闭loading条,切换程序动作。
onReceivedError(WebView view,int errorCode,String description,String failingUrl)报告错误信息
onReceivedHttpAuthRequest(WebView view,HttpAuthHandler handler,String host,String realm)获取返回信息授权请求
onReceivedSslError(WebView view,SslErrorHandler handler,SslError error)重写此方法可以让webview处理https请求。
onScaleChanged(WebView view,float oldScale,float newScale)WebView发生改变时调用
onUnhandledKeyEvent(WebView view,KeyEvent event)Key事件未被加载时调用
shouldOverrideKeyEvent(WebView view,KeyEvent event)重写此方法才能够处理在浏览器中的按键事件。
shouldOverrideUrlLoading(WebView view,String url)在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。