Android之WebView学习

WebView常用方法

WebSettings

在使用WebView前我们都要进行相关的配置,常见的操作如下:

 WebSettings settings = mWebView.getSettings();settings.setJavaScriptEnabled(true);    //支持javascriptsettings.setUseWideViewPort(true);    //设置webview推荐使用的窗口,使html界面自适应屏幕settings.setLoadWithOverviewMode(true);     //缩放至屏幕的大小settings.setAllowFileAccess(true);      //设置可以访问文件
//        settings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);    //设置中等像素密度,medium=160dpisettings.setSupportZoom(true);    //设置支持缩放settings.setLoadsImagesAutomatically(true);    //设置自动加载图片
//        settings.setBlockNetworkImage(true);    //设置网页在加载的时候暂时不加载图片
//        settings.setAppCachePath("");   //设置缓存路径settings.setCacheMode(WebSettings.LOAD_NO_CACHE);   //设置缓存模式

WebChromeClient

WebChromeClient主要是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等。

mWebView.setWebChromeClient(new WebChromeClient() {@Overridepublic void onReceivedTitle(WebView view, String title) {super.onReceivedTitle(view, title);mTitle.setText(title);}@Overridepublic void onProgressChanged(WebView view, int newProgress) {super.onProgressChanged(view, newProgress);if (newProgress == 100) {mProgressBar.setVisibility(View.GONE);}mProgressBar.setProgress(newProgress);}});

WebViewClient

WebViewClient用来辅助WebView处理各种通知、请求事件的,例如在WebView中点击请求新的链接、页面加载开始、结束等:

mWebView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {return true;}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);}@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);}});

上\下一个页面

private void goBack(){if (mWebView.canGoBack()){mWebView.goBack();}else{finish();}}private void goForward() {if (mWebView.canGoForward()) {mWebView.goForward();}}

就是通过WebView的goBack()、goForward()方法。

下载

mWebView.setDownloadListener(new DownloadListener() {@Overridepublic void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,long contentLength) {}});

java与js交互

首先编写一个简单的H5:

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>js test</title>
</head><script type="text/javascript">function click1(){window.client.showMessage("来自js的消息");}function click2(msg){alert("来自java代码的消息:" + msg)}</script>
<body><input id="one" type="button"  value="js调用java代码" onclick="click1()"style="width:300px; height:150px; font-size:35px"/>
</body>
</html>

内容很简单,两个函数click1、click2,一个按钮,点击按钮执行click1函数。

将改H5文件放到assets目录,之后用WebView加载改H5:

mWebView.loadUrl("file:///android_asset/test.html");

接下来在Activity中编写一个特殊的类:

class JsOperation {@JavascriptInterfacepublic void showMessage(String msg) {Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();}}

然后注入到WebView中:

mWebView.addJavascriptInterface(new JsOperation(), "client");

注意和js中的这行代码对比下:

window.client.showMessage("来自js的消息");

其中client就是addJavascriptInterface()的第二个参数,当然这个参数可以自定义,但要保持一致。js中调用的showMessage()方法,就是我们JsOperation类中的方法。

点击H5中的按钮,可以看到一个Toast提示:

到这里就完成了js对java代码的调用,接下来看如下通过java代码调用js。
其实很简单:

mWebView.loadUrl("javascript:click2" + "(" + 1008611 + ")");

这样就可以执行js中的click2函数了。我们通过模拟器返回键执行这行代码,可以看到一个提示框,即click2函数得到执行:

模拟原生应用的页面跳转

效果

首先可以在Activity的onCreate()中创建一个栈,并将当前Activity入栈:

if (mStack == null) {mStack = new Stack<>();}mStack.push(this);

在WebView中继续加载新页面时:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {Intent intent = new Intent(MainActivity.this, MainActivity.class);intent.putExtra("url", url);startActivity(intent);return true;}

我们重写了shouldOverrideUrlLoading(),重新启动当前Activity来加载新链接,则一个新的Activtiy会入栈,这样就有了跳转的效果。
在返回上一个界面时进行出栈操作:

private void popActivity() {if (mStack.size() > 0) {mStack.remove(this);this.finish();}}

源码

源码

参考链接

Android 你应该知道的WebView - 简书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跌宕中,特斯拉拿下上海工厂,给蔚来们留下不到两年窗口期

来源&#xff1a;网易智能昨日&#xff0c;特斯拉上海工厂尘埃落定。特斯拉与上海规划与国土资源管理局签订协议&#xff0c;以9.73亿人民币拿下上海临港约1297.32亩地建造汽车工厂。据悉&#xff0c;这是特斯拉在美国之外设立的首个超级工厂。根据特斯拉的规划&#xff0c;上海…

2019科学突破奖揭晓 庄小威陈志坚许晨阳上榜

来源&#xff1a;科学网10月17日&#xff0c;科学突破奖&#xff08;Breakthrough Prize&#xff09;名单揭晓。总计2200万美元的奖金分别给了婴儿死亡主要遗传因素治疗、超分辨率成像、发现一种新型电子材料以及其他重大突破。华裔科学家庄小威、陈志坚、C. Frank Bennett 、A…

Android之IPC机制

Android IPC简介 任何一个操作系统都需要有相应的IPC机制&#xff0c;Linux上可以通过命名通道、共享内存、信号量等来进行进程间通信。Android系统不仅可以使用了Binder机制来实现IPC&#xff0c;还可以使用Socket实现任意两个终端之间的通信。 IPC基础概念介绍 (1)Seriali…

HTML5与原生APP之争胜负已出?

早在HTML5技术问世之时&#xff0c;有关网络应用与原生应用谁将成为移动终端霸主的问题&#xff0c;就曾引起过广泛的争论。时至今日&#xff0c;不仅关于二者孰强孰弱的争论已然平息&#xff0c;就连备受关注的移动互联网创业公司也大多是做原生APP的&#xff0c;未曾见过HTML…

5G 产业链:基站天线和小基站爆发潜力大

来源&#xff1a;国信证券5G宏基站数的翻倍增长及技术演进带来基站天线成倍增长空间。5G关键性能指标十倍的增长需要基站数翻倍增长以支撑。5G的三个关键的效率需求包括频谱利用效率、能耗效率和成本效率。具体来说&#xff0c;5G在频谱效率、能源效率和成本效率的提升需求在十…

操作系统之死锁

死锁的概念以及产生死锁的原因 一组进程中&#xff0c;每个进程都无限等待被该组进程中另一进程所占有的资源&#xff0c;因而永远无法得到的资源&#xff0c;这种现象称为进程死锁&#xff0c;这一组进程就称为死锁进程,如果死锁发生&#xff0c;会浪费大量系统资源&#xff…

2018全球最佳品牌Top25:时代巨变的一个缩影

来源&#xff1a;资本实验室10月15日&#xff0c;希尔斯控股正式向美国破产法院申请破产保护。这一消息传出&#xff0c;即引发了全球关注。作为19世纪八十年代末以邮购业务起家的零售商&#xff0c;希尔斯百货已经历一百多年的世事变化与市场风云&#xff0c;毫无疑问是美国零…

香港2013迷你制汇节即将启幕

“制汇节是一个世界的盛事。在亚洲&#xff0c;有深圳迷你制汇节和台湾迷你制汇节。在美国&#xff0c;2013年港湾地区制汇节刚刚在5月圆满举办。来自世界各地的maker展示了他们伟大的作品并分享了他们的智慧。我们相信香港也有很多maker&#xff0c;第二届香港迷你制汇节正在开…

重磅!Gartner公布2019年十大战略科技发展趋势

来源&#xff1a;网络大数据摘要&#xff1a;10月14日至18日&#xff0c;分析师在Gartner Symposium/ITxpo 2018大会探讨了在2019年企业与组织需要探索的十大战略技术趋势(Gartner Top 10 Strategic Technology Trends 2019)。Gartner将战略性技术趋势定义为具有巨大破坏性潜力…

sixxpack破解的文章!【转】

星期天闲着没事玩游戏&#xff0c;玩游戏不能无外挂。于是百度了半天&#xff0c;找到了一个&#xff0c;看介绍貌似不错&#xff0c;就下载了下来。一看&#xff0c;竟然是用.net写的&#xff0c;下意识地Reflector了一下。发现竟是一个叫actmp的程序集。如图&#xff1a; 随…

postgres与osm初步使用

layout: post title: postgres与osm初步使用 date: 2016-9-20 categories: blog tags: [地图开发] description:地图开发 本文主要包括以下内容 postgreSQL数据库&#xff0c;用来存放地图原始数据osm2pgsql 用来将osm地图数据导入到postgreSQL  OSM数据 OpenStre…

XxIJob入门-示例

一、部署 xxlJob (一) 下载地址&#xff0c; git clone 到本地。 http://gitee.com/xuxueli0323/xxl-job https://github.com/xuxueli/xxl-job (二) 插入 xxl_job 的sql脚本&#xff1a; 在项目的 /xxl-job/doc/db/tables_xxl_job.sql &#xff0c;找到sql脚本&#xff0c…

华为数字化转型实践

来源&#xff1a;先进制造业数字化转型势在必行&#xff0c;这已成为所有企业CIO的共识。但在现实中&#xff0c;很多数字化转型计划还是陷入重重困难&#xff0c;其原因大多在于企业内部对数字化转型的认知还不够透彻。尤其是对于那些业务正处于发展和上升期的公司&#xff0c…

使用Excel VBA(快捷键)(加菜单)

将excel宏安全性调到中&#xff1a; 按altf11进入vba编辑器&#xff1a; 记住以下快捷键&#xff1a; F7 代码窗口 F4 属性窗口 ctrlR 工程资源窗口 F5 程序运行 TAb 代码缩进 SHIFTTAB 凸出 加菜单&#xff1a; 在excel表中按altf11进入代码窗口&#xff1a; 解释&#xff1a…

赛迪研究院发布《2018年中国自动驾驶产业发展及投资价值白皮书》!

来源&#xff1a;中国电子信息产业发展研究院10月19日&#xff0c;由北京市人民政府、工业和信息化部主办&#xff0c;工业和信息化部装备工业发展中心、中国电子信息产业发展研究院&#xff08;以下简称“赛迪研究院”&#xff09;等机构共同承办的“世界智能网联汽车大会”进…

瓦片地图与geoserver发布

本文主要包括以下内容 TileMill生成Tile影像金字塔&#xff08;.mbtiles压缩文件&#xff09;Mbutil(https://github.com/mapbox/mbutil)解压缩Apache HTTP Server(或tomcat) 建立web瓦片服务客户端调用&#xff08; http://www.arcgis.com/home&#xff09;测试 首先将数据…

AI手机报告 | 揭秘手机行业未来AI之路

来源&#xff1a;网易智能在10月19日上午举办的IDC中国数字化转型年度盛典的“人工智能与大数据”分论坛上&#xff0c;IDC&#xff08;国际数据公司&#xff0c;International Data Corporation&#xff09;联合旷视科技发布“AI手机”行业白皮书报告——《IDC手机行业白皮书&…

Flex 学习笔记------FLACC Crossbridge

FLACC & Crossbridge 前段时间在研究如何在Flex项目中处理图片的一些信息&#xff0c;比如获取图片的颜色通道&#xff0c;DPI信息等&#xff0c;搜索了半天还是一无所获。图像处理是一个比较复杂的过程&#xff0c;不过想来前端处理图像也是一个必然的趋势。 看看这个腾讯…

IOS之计算器实现

本文利用ios实现计算器app&#xff0c;后期将用mvc结构重构 import UIKitclass CalculViewController: UIViewController {IBOutlet weak var display: UILabel!var userIsInTheMiddleOFTypingANumber:BoolfalseIBAction func appendDigit(sender: UIButton) {let digitsender…

AI进军新药发现研究?这99页slides了解一下

来源&#xff1a;专知摘要&#xff1a;近些年&#xff0c;深度学习对许多研究领域产生了深远的影响&#xff0c;应用场景也十分宽泛。我们都知道在医疗领域&#xff0c;新药发现研究是高成本&#xff0c;低产出的&#xff0c;但是对推进医疗领域的发展起到至关重要的作用。今天…