热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidWebView开发项目使用这些就够了

1、加载网页、刷新网页、前进、后退在xml文件中

1、加载网页、刷新网页、前进、后退

在xml文件中


在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{@Overridepublic void onReceivedTitle(WebView view, String title) {super.onReceivedTitle(view, title);L.D("title就是网页标题:" + title);}
}
wvTest.setWebChromeClient(new MyWebViewChromeClient());


4、下载文件

wvTest.setDownloadListener(new DownloadListener() {@Overridepublic 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{@Overridepublic 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中被调用的方法@JavascriptInterfacepublic void callFromJs(){Toast.makeText(mContext, "js调用啦~", Toast.LENGTH_LONG).show();}
}settings.setJavascriptEnabled(true);
wvTest.addJavascriptInterface(new CalledByJs(this), "demo");


Javascript代码:

function call(){demo.callFromJs();
}


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页面标题@Overridepublic void onReceivedTitle(WebView view, String title) {title(title);if(TextUtils.isEmpty(shareDesc)){shareDesc = title;shareTitle = title;}}//显示Web页面加载进度 方式1:@Overridepublic 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{
@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);//弹Loading框进行加载}@Overridepublic 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(){@Overridepublic 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


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Summarize function is doing alignment without timezone ?
    Hi.Imtryingtogetsummarizefrom00:00otfirstdayofthismonthametric, ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 前端不规则图像点击_如何在前端开发的潮流中快速学习学好学以致用?
    大家好,我是致力于前端开发,前端设计,前端入门的前端小姐姐,今天为大家带来的前端新知识是【雪碧图和滑动门】,不 ... [详细]
  • webui之常用js操作(webui界面是什么)
    本文目录一览:1、web前端开发需要掌握的几个必备技术 ... [详细]
  • 资源:吊炸天!74款APP完整源码!android界面中点击输入框时弹出输入法如果输入框在底部会出现输入法遮挡输入内容的问题解决办法设置activity的windowsoftinpu ... [详细]
  • HTML制作简单首页导航
    h1大标题:李广程的作业列表查看演示地址一:http:js.lgcweb.cn查看演示备用地址:http:39.105.0.128Ja ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 01mui框架使用概述
    1MUI概述1.1MUI诞生背景?性能和体验的差距,一直是手机APP开发者放弃HTML5的首要原因。浏览器默认控件样式又少又丑,制作一 ... [详细]
  • Android Studio中的IBM MobileFirst Compile问题 - IBM MobileFirst Compile in Android Studio Issue
    IbuiltaMultipageapplicationbyusingIBMMobileFirst,accordingto据我所知,我使用IBMMobileFirst构建了一个 ... [详细]
author-avatar
宝贝不哭522502903183
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有