Android--WebView开发项目使用这些就够了
2017-08-19 16:52
423 查看
1、加载网页、刷新网页、前进、后退
在xml文件中<WebView android:id="@+id/wv_test" android:layout_width="match_parent" android:layout_height="match_parent" />
在java代码中:
WebView wvTest = (WebView)findViewById(R.id.wv_banner); //加载网络网页 wvTest.loadUrl("http://www.baidu.com"); //加载本地网页 wvTest.loadData("file:///android_asset/refresh/refresh.html"); //返回上个页面 if(wvTest.canGoBack()){ wvTest.goBack(); } //去刚才浏览的页面 if(wvTest.canGoForward()){ wvTest.goForward(); } //刷新当前页面 wvTest.reload();
2、设置一些参数
注: 需要用到什么设置,随时查一下即可。最后一条在加载含有Html5新标签的网页的时候需要加上这句话。WebSettings settings = wvTest.getSettings(); settings.setJavaScriptEnabled(true);//支持javascript settings.setUseWideViewPort(true);//适配屏幕 settings.setLoadWithOverviewMode(true); settings.setBuiltInZoomControls(true);//支持放大缩小 settings.setDisplayZoomControls(false);//隐藏放大缩小的按钮 settings.setDomStorageEnabled(true);//支持Html5标签 ……等
3、获取网页标题
class MyWebViewChromeClient extends WebChromeClient{ @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); L.D("title就是网页标题:" + title); } } wvTest.setWebChromeClient(new MyWebViewChromeClient());
4、下载文件
wvTest.setDownloadListener(new DownloadListener() { @Override public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { //需要下载的文件的地址就是url,及可以下载文件 } });
调用系统浏览器去下载文件(updateUrl是下载地址):
Intent intent= new Intent(); intent.setAction("android.intent.action.VIEW"); Uri content_url = Uri.parse(updateUrl); intent.setData(content_url); startActivity(Intent.createChooser(intent, "请选择浏览器"));
5、WebView错误码处理
就在网页加载失败、没有网络的情况下WebView会把加载的网页地址显示出来。为了避免这种情况,我们需要做如下处理:class MyWebViewClient extends WebViewClient{ @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); //在这里进行加载错误、没有网络情况的处理 //方式1:加载一个本地的默认页面 wvTest.loadData("file:///android_asset/refresh/refresh.html"); //方式2:显示一个默认布局 tvDefault.setText("网页加载失败"); wvTest.setVisibility(View.GONE); } } wvTest.setWebViewClient(new MyWebViewClient());
6、和JavaScript交互(简单的调用、传值)
Java代码://被javascript调用的类 class CalledByJs { private Context mContext; public CalledByJs(Context context){ this.mContext = context; } //在js中被调用的方法 @JavascriptInterface public void callFromJs(){ Toast.makeText(mContext, "js调用啦~", Toast.LENGTH_LONG).show(); } } settings.setJavaScriptEnabled(true); wvTest.addJavascriptInterface(new CalledByJs(this), "demo");
JavaScript代码:
function call(){ demo.callFromJs(); } <img src="img/refreshicon.png" onclick="call()" alt="轻触屏幕重新刷新" />
7、WebView自定义拦截
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if(!TextUtils.isEmpty(url)){ if("open_login".equals(url)){ Intent intent = new Intent(this,LoginActivity.class); startActivity(intent); return true; }else { return false; } } return super.shouldOverrideUrlLoading(view, url); }
这里解释一下这个方法的返回值:
返回true:
webview处理url是根据程序来执行的。即:如果返回为true,即不再会通过webview加载,而是执行你写的拦截的程序,如果没有的话就不执行(不执行就是,内容有href,超链接也不会跳转了)
返回false:
webview处理url是在webview内部执行。返回false的话就可以执行内容的超链接跳转。
8、获取Web页面的标题,显示Web加载进度
其中显示Web页面加载进度有两种方式:class MyChromeClient extends WebChromeClient{ //获取Web页面标题 @Override public void onReceivedTitle(WebView view, String title) { title(title); if(TextUtils.isEmpty(shareDesc)){ shareDesc = title; shareTitle = title; } } //显示Web页面加载进度 方式1: @Override public void onProgressChanged(WebView view, int newProgress){ if (newProgress == 100) { pbWebLoad.setVisibility(View.GONE); } else { if (View.GONE == pbWebLoad.getVisibility()) { pbWebLoad.setVisibility(View.VISIBLE); } pbWebLoad.setProgress(newProgress); } super.onProgressChanged(view, newProgress); } } //显示Web页面加载进度 方式2: private class MyWebViewClient extends WebViewClient{ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); //弹Loading框进行加载 } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); //消失Loading框,加载完毕 } }
9、清空WebView缓存
/** * WebView清空缓存 */ public static void clearCache(Context context) { CookieSyncManager cookieSyncMngr = CookieSyncManager.createInstance(context); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookie(); context.deleteDatabase("webview.db"); context.deleteDatabase("webviewCache.db"); context.deleteDatabase("webviewCookiesChromium.db"); context.deleteDatabase("webviewCookiesChromiumPrivate.db"); //WebView 缓存文件 File webviewCacheDir = new File(context.getCacheDir().getAbsolutePath()+"/webviewCacheChromium"); //删除webview 缓存目录 if(webviewCacheDir.exists()){ deleteFile(webviewCacheDir); } }
10、访问https地址
wvTest.setWebViewClient(new WebViewClient(){ @Override public void onReceivedSslError(WebView view,SslErrorHandler handler, SslError error) { super.onReceivedSslError(view, handler, error); //handler.cancel(); // Android默认的处理方式 handler.proceed(); // 接受所有网站的证书 //handleMessage(Message msg); // 进行其他处理 } });
原文链接:http://www.jianshu.com/p/7223e35da485
相关文章推荐
- Android应用开发之(WebView中loadData与loadDataWithBaseURL的使用上的区别)
- android开发中WebView的使用(附完整程序)
- android开发android webView 使用方法
- Android开发如何正确使用WebView
- android开发之android webView使用方法
- Android新浪微博-项目整理总结 二[使用WebView获取OAuth验证码]
- Android开发之WebView组件的使用详解
- android开发中WebView的使用(附完整程序)
- Android开发中使用WebView后程序进入后台依旧占用CPU的解决
- Android客户端开发即WebView组件的使用详解
- android开发中WebView的使用
- android开发中WebView的使用(附完整程序)
- android开发中WebView的使用(附完整程序)
- android开发(30) 使用WebView,点击网页中的链接建立QQ 临时会话 WPA
- android开发中WebView的使用(附完整程序)
- Android开发 WebView使用注意事项
- android开发,使用fragment加载webview,加载出现1秒空白。
- (转)android开发中WebView的使用(附完整程序)
- Android开发---WebView控件的使用
- Android开发之WebView组件的使用解析