版权声明:本文为博主原创文章,未经博主允许不得转载。
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编码为#, %, ', ? 。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 += "