梯子加速器:https://www.svpn.me/
WebView在现在的项目中使用频率还是非常高的,最近负责华为智能商城模块的开发工作中,产生不少心得,觉得有必要把相关的基础内容整理一下(写这个应该没有违反公司的信息安全规定吧,因为都是基础的东西加上是在休息时间也不包含公司源码任何敏感信息)现在的移动应用呢,几乎都是hybrid方式,也就是集成了Native APP和Web APP的优点,保证了用户的体验,我们又可以在一定程度上动态的更新的能力,跨平台性。
Hybrid实现的关键在于如何打通Java 和JS的交互,信息通信主要说一下,就是两点内容,Java去调用JavaScript ,和JavaScript去调用Java 在android开发中我们用WebView来加载HTML 或者是HTML5 或其他JSP,WebView默认提供了他们去交互的能力。
(张小月关于android中和前端的Web页面相关的内容,我会分为四个部分来介绍(本章节为第一篇):1.android webview使用方法(基础)这一部分是基础的东西(本篇)2.android WebView使用方法二-处理跳转URL,监听页面变化,缓存及回退。
3.android WebView使用方法三-js交互(进阶)这一部分主要会讲解Java ,Js交互4.Android WebView使用方法四-H5交互上传文件(图片)5.附5 android WebView使用常见问题汇总以及解决方案(高级)。
在这里会查到WebSettings中常见的设置,WebView方法的汇总Beginandroid webview使用方法(基础)这一部分是基础的东西(本篇1) . 一般来说,我们在写WebView时,加载网页有两种情况,第一种是我们利用WebView加载本地的资源文件,这里的资源文件可以是图片,html代码,或者是远程的网络资源。
但第一种其实完全可以不考虑,因为如果我们加载本地了html还怎么跨平台呢?但是这里可以作为了解,如何利用WebView加载本地的html代码?和如何远程加载网页显示到android中?主要我们会调用WebView的三个方法,LoadUrl ;LoadData , LoadDataWithBase。
具体请参考以下内容:(1)加载本地的资源文件(假设在你手机assets,或者sdcard存在以下index.html文件),如我们使用WebView的loadUrl方法加载本地的index.html代码。
WebView mWebview= (WebView)findViewById(R.id.wv1); WebSettings wSet = wView.getSettings(); wSet.setJavaScriptEnabled(true); //mWebview.loadUrl("file:///android_asset/index.html"); //工程目录assets index.html文件 //mWebview.loadUrl("content://com.android.htmlfileprovider/sdcard/index.html");//本地sdcard文件。
如使用WebView的loadUrl方法加载本地的一张图片String str = "file:///android_asset/icon.png"; mWebview.loadUrl(str);。
如我们也可以用webView的loadDataWithBaseURl来完成.(故意排版zhangxiaoyue)String data = "在模拟器 2.1 上测试WebView,这是file:///android_asset/。
zhangluyue.jpg\"/>张小月的图片"; // SDK1.5本地文件处理(不能显示图片) //mWebview.loadData(URLEncoder.encode(data, encoding), mimeType, encoding);
// SDK1.6及以后版本 //mWebview.loadData(data, mimeType, encoding);// 本地文件处理(能显示图片) mWebview.loadDataWithBaseURL(null, data, mimeType, encoding, null);
【telegram指定翻墙地址:www.av1o.com】
备注:static final String mimeType = "text/html"; static final String encoding = "utf-8";(2)加载远程资源文件直接网页显示google:
mWebview.loadUrl("http://www.google.com");直接显示一张图片:可以是gif,或者jpg,你可以点击以下链接预览图片[zhangxiaoyue](url="")https://
pic4.zhimg.com/v2-f448d6841c6af7b1abaeb7b339a7e247_b.jpgmWebview.loadUrl("https://pic4.zhimg.com/v2-f448d6841c6af7b1abaeb7b339a7e247_b.jpg");
中文显示:String data = "在模拟器 2.1 上测试"; // utf-8编码处理(在SDK1.5模拟器和真实设备上都将出现乱码,SDK1.6上能正常显示) // mWebview.loadData(data, mimeType, encoding); // 对数据进行编码处理(SDK1.5版本) mWebview.loadData(URLEncoder.encode(data, encoding), mimeType, encoding); // mWebview.loadDataWithBaseURL(null, data, mimeType, encoding, null);
(3)区别和联系以上内容是非常非常基础的东西,细心的人肯定发现我用了三种方式加载本地或远程的资源文件,LoadUrl ;LoadData , LoadDataWithBase,那么他们有什么区别呢?用过的人都知道,LoadUrl有点浪费流量,而且加载起来有点慢,考虑用其它的方法来实现。
在加载页面时,如果只加载数据,页面模板提前写好放到项目中,这样就可以来更快的加载页面,用户体验会好些如果不用loadUrl,省下的就只有LoadData和loadDataWithBaseURL了LoadData :
data:是要加载的数据类型,但在数据里面不能出现英文字符:#, %, \ , ? 这四个字符,如果有的话可以用 %23, %25, %27, %3f,这些字符来替换,在平时测试时,你的数据时,你的数据里含有这些字符,但不会出问题,当出问题时,你可以替换下。
%,会报找不到页面错误,页面全是乱码乱码样式见符件#,会让你的goBack失效,但canGoBAck是可以使用的于是就会产生返回按钮生效,但不能返回的情况\ 和? 我在转换时,会报错,因为它会把\当作转义符来使用,如果用两级转义,也不生效,我是对它无语了。
loadDataWithBaseURL:需要注意的就是 baseUr:虽然API上写的是要传一个Url,但我在用时,发现传一个Url并不可以,我发现这个就是一个标志位,用来标志当前页面的Key值的,而historyUrl就是一个value值,在加载时,它会把baseUrl和historyUrl传到List列表中,当作历史记录来使用,当前进和后退时,它会通过baseUrl来寻找historyUrl的路径来加载historyUrl路径来加载历史界面,需要注意的就是history所指向的必须是一个页面,并且页面存在于SD卡中或程序中(assets),loadDataWithBaseURL,它本身并不会向历史记录中存储数据,要想实现历史记录,需要我们自己来实现,也许是我的技术有限,我有了比较笨的访求来实现:就是在加载页面时,我把数据另外的写到一个html页面中,并把它保存到SD中,当点击返回时,它会通过historyUrl指向的路径来加载页面,这样就解决了历史记录问题。
总结一下:我们在使用loadData时,就意味着需要把所有的非法字符全部转换掉,这样就会给运行速度带来很大的影响,因为在使用时,在页面stytle中会使用很多%号页面的数据越多,运行的速度就会越慢上面这两种方法,我建议使用后者,虽然loadData的历史记录不需要我们自己来实现,但在使用时,我们必须把所有的%,#,\,?转换掉,在转换时,也许会遇到别的困难,我也没有测完。
这就两个加载上后者比前者快一到两倍Endandroid webview使用方法(基础)主要是一些基础的东西,价值不是很大,但是可以帮助大家理解,在使用以上介绍内容时,可能会遇到打开网页时调用了系统的浏览器,而不是在本WebView中:那我们应该如何做呢?
为了保证文章的篇幅,我把该部分相关内容放到下一章节部分代码Android WebView使用常见问题汇总以及解决方案(高级)在这里会查到WebSettings中常见的设置,WebView方法的汇总打开网页时不调用系统浏览器, 而是在本WebView中显示:
mWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } });
授人以鱼,不如授人与渔,话不多晴雨 2017-06-27 13:05 转载请标明出处 也可以手动点击关注我获取更多信息。
超级加密线路:https://www.shunjian.gq/