WebView简介(联网权限)

来源:互联网 发布:苹果手机无线抢网络 编辑:程序博客网 时间:2024/05/16 08:06

WebView简介(联网权限) 
WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用WebKit渲染引擎加载显示网页 
当前主流的浏览器内核 
Trident Gecko WebKit Prosto 
实例化WebView的对象 (1)webview=new WebView(context); setContentView(webview); (2)setContentView (R.layout.activityjavacall_javascript); webview = (WebView) findViewById(R.id.webview); 
设置显示的网页 
webview.loadUrl 
webview.loadData 
webview.loadDataWithBaseURL 
用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面 //设置回退 //覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { webview.goBack(); //goBack()表示返回WebView的上一页面 return true; } return false; } 
如果访问的页面中有JavaScript,则webview必须设置支持Javascript。 WebSettings webSetting = webview.getSettings(); webSetting.setJavaScriptEnabled(true); 
如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖webview的WebViewClient对象。

webview.setWebViewClient(new WebViewClient() {

public boolean shouldOverrideUrlLoading(WebView view, String url) {    view.loadUrl(url);    return true;}

}); 
如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点。 webview.requestFocusFromTouch();

原来是因为WebView默认没有开启文件下载的功能,如果要实现文件下载的功能,需要设置WebView的DownloadListener,通过实现自己的DownloadListener来实现文件的下载。

1、设置WebView的DownloadListener: webView.setDownloadListener(new MyWebViewDownLoadListener()); 
2、实现MyWebViewDownLoadListener这个类,具体可以如下这样: 
private class MyWebViewDownLoadListener implements DownloadListener { 
// 这只是调用系统中已经内置的浏览器进行下载,还没有WebView本身进行的文件下载 
@Override 
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, 
long contentLength) { 
Uri uri = Uri.parse(url); 
Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
startActivity(intent); 
}


WebSettings的常用方法介绍 
setJavaScriptEnabled(true);

//支持js脚步 
setPluginsEnabled(true);

//支持插件 
3 setUseWideViewPort(false); 
//将图片调整到适合webview的大小 
4 setSupportZoom(true); 
//支持缩放 
5 setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 
//支持内容从新布局 
6 supportMultipleWindows(); 
//多窗口 
7 setCacheMode(WebSettings.LOADCACHEELSE_NETWORK); 
//关闭webview中缓存 
8 setAllowFileAccess(true); 
//设置可以访问文件 
9 setNeedInitialFocus(true); 
//当webview调用requestFocus时为webview设置节点 
webSettings.setBuiltInZoomControls(true);

//设置支持缩放

10 setJavaScriptCanOpenWindowsAutomatically(true); 
//支持通过JS打开新窗口 
11 setLoadsImagesAutomatically(true); 
//支持自动加载图片 
WebViewClient的方法全解 
1 doUpdateVisitedHistory(WebViewview,Stringurl, boolean isReload) 
(更新历史记录) 
2 onFormResubmission(WebViewview,MessagedontResend,Messageresend) 
(应用程序重新请求网页数据) 
3 onLoadResource(WebViewview,Stringurl) 
在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。 
4 onPageStarted(WebViewview,Stringurl,Bitmapfavicon) 
这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告

诉用户程序在等待网络响应。

5 onPageFinished(WebViewview,Stringurl) 
在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关

闭loading 条,切换程序动作。 
6 onReceivedError(WebViewview, int errorCode, Stringdescription,StringfailingUrl) 
(报告错误信息) 
7 onReceivedHttpAuthRequest(WebViewview,HttpAuthHandlerhandler,Stringhost, 
Stringrealm)(获取返回信息授权请求) 
8 onReceivedSslError(WebViewview,SslErrorHandlerhandler,SslErrorerror) 
重写此方法可以让webview处理https请求。 
9 onScaleChanged(WebViewview, float oldScale, float newScale) 
(WebView发生改变时调用) 
10 onUnhandledKeyEvent(WebViewview,KeyEventevent) 
(Key事件未被加载时调用) 
11 shouldOverrideKeyEvent(WebViewview,KeyEventevent) 
重写此方法才能够处理在浏览器中的按键事件。 
12 shouldOverrideUrlLoading(WebViewview,Stringurl) 
在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做 很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。 
显示视图 
1.loadUrl 1 网络内容 LoadUrl直接显示网页内容(单独显示网络图片) 2APK包内文件 LoadUrl显示APK中Html和图片文件 
(1)把网页写在工程根目录下的assets目录下 webview.loadUrl(“file:///android_asset/JavaCallJS1.html”); (2)网页 webview.loadUrl(“http://10.0.2.2:8080/JavaCallJS1.html“); 2. webview.loadData 1 网络内容 LoadData显示中文网页内容(含空格的处理) 2APK包内文件 LoadData(loadDataWithBaseURL)显示APK中图片和文字混合的Html内容 注意 : css中经常用’#’, ‘%’, ‘\’,’?’等字符,我们需要用UrlEncoder编码为%23, %25, %27, %3f 。loadData()中的html data中不能包含’#’, ‘%’, ‘\’, ‘?’四中特殊字符,出现这种字符就会出现解析错误,显示找不到网页还有部分html代码。 
webview.loadDataWithBaseURL data为string类型的html代码 1 webView.loadData(URLEncoder.encode(data, “utf-8”), “text/html”, “utf-8”); 这样一些背景效果什么的都不怎么好看了。不推荐。 2 webView.loadDataWithBaseURL(null,data, “text/html”, “utf-8”, null); 这样就会完美解析了。 
Java调用js 
webview.loadUrl(“javascript:javaCallJs()”); javaCallJs()//是 

function javaCallJs(){ document.getElementById("content").innerHTML += "
原创粉丝点击