对于android初学者应该都了解webView这个组件。之前我也是对其进行了一些简单的了解,但是在一个项目中不得不用webview的时候,发现了webview的强大之处,今天就分享一下使用webview的一些经验。

1、首先了解一下webview。

webview介绍的原文如下:A View that displays web pages. This class is the basis upon which you can roll your own web browser or simply display some online content within your Activity. It uses the WebKit rendering engine to display web pages and includes methods to navigate forward and backward through a history, zoom in and out, perform text searches and more.

从上面你应该了解到了基本功能,也就是显示网页。之所以我说webview功能强大是因为它和js的交互非常方便,很简单就可以实现。

2、webview能做什么?

①webView可以利用html做界面布局,虽然目前还比较少人这么使用,不过我相信当一些客户端需要复杂的图文(图文都是动态生成)混排的时候它肯定是个不错的选择。

②直接显示网页,这功能当然也是它最基本的功能。

③和js交互。(如果你的js基础比java基础好的话那么采用这种方式做一些复杂的处理是个不错的选择)。

3、如何使用webview?

这里直接用一个svn上取下的demo,先上demo后讲解。demo的结构图如下:

WebViewDemo.java

packagecom.google.android.webviewdemo;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.util.Log;importandroid.webkit.JsResult;importandroid.webkit.WebChromeClient;importandroid.webkit.WebSettings;importandroid.webkit.WebView;/*** Demonstrates how to embed a WebView in your activity. Also demonstrates how* to have javascript in the WebView call into the activity, and how the activity * can invoke javascript.* <p>* In this example, clicking on the android in the WebView will result in a call into* the activities code in {@linkDemoJavaScriptInterface#clickOnAndroid()}. This code* will turn around and invoke javascript using the {@linkWebView#loadUrl(String)}* method.* <p>* Obviously all of this could have been accomplished without calling into the activity* and then back into javascript, but this code is intended to show how to set up the * code paths for this sort of communication.**/
public class WebViewDemo extendsActivity {private static final String LOG_TAG = "WebViewDemo";privateWebView mWebView;private Handler mHandler = newHandler();@Overridepublic voidonCreate(Bundle icicle) {super.onCreate(icicle);setContentView(R.layout.main);mWebView=(WebView) findViewById(R.id.webview);WebSettings webSettings=mWebView.getSettings();webSettings.setSavePassword(false);webSettings.setSaveFormData(false);webSettings.setJavaScriptEnabled(true);webSettings.setSupportZoom(false);mWebView.setWebChromeClient(newMyWebChromeClient());mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");mWebView.loadUrl("file:///android_asset/demo.html");}final classDemoJavaScriptInterface {DemoJavaScriptInterface() {}/*** This is not called on the UI thread. Post a runnable to invoke* loadUrl on the UI thread.*/public voidclickOnAndroid() {mHandler.post(newRunnable() {public voidrun() {mWebView.loadUrl("javascript:wave()");}});}}/*** Provides a hook for calling "alert" from javascript. Useful for* debugging your javascript.*/final class MyWebChromeClient extendsWebChromeClient {@Overridepublic booleanonJsAlert(WebView view, String url, String message, JsResult result) {Log.d(LOG_TAG, message);result.confirm();return true;}}
}

demo.html

<html><scriptlanguage="javascript">/*This function is invoked by the activity*/functionwave() {alert("1");document.getElementById("droid").src="android_waving.png";alert("2");}</script><body><!--Calls into the javascript interface for the activity--><aonClick="window.demo.clickOnAndroid()"><divstyle="width:80px;margin:0px auto;padding:10px;text-align:center;border:2px solid #202020;" ><imgid="droid"src="android_normal.png"/><br>Click me!</div></a></body>
</html>

main.xml

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/intro"android:padding="4dip"android:textSize="16sp"/><WebViewandroid:id="@+id/webview"android:layout_width="fill_parent"android:layout_height="0dip"android:layout_weight="1"/></LinearLayout>

4、如何交互?

①android如何调用js。

调用 形式:

mWebView.loadUrl("javascript:wave()");

其中wave()是js中的一个方法,当然你可以把这个方法改成其他的方法,也就是android调用其他的方法。

②js如何调用android。

调用形式:

<aonClick="window.demo.clickOnAndroid()">

代码中的“demo”是在android中指定的调用名称,即

 mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");

代码中的clickOnAndroid()是“demo”对应的对象:new DemoJavaScriptInterface() 中的一个方法。

③双向交互。

当然是把前面的两种方式组合一下就可以了。

5、讲解demo。

现在你一定了解了android和js的交互了。是时候分析一些demo了,根据上面讲的你也应该比较清楚了。具体交互流程如下:

①点击图片,则在js端直接调用android上的方法clickOnAndroid();

②clickOnAndroid()方法(利用线程)调用js的方法。

③被②调用的js直接控制html。

个人总结:利用webView的这种方式在有些时候UI布局就可以转成相应的html代码编写了,而html布局样式之类有DW这样强大的工具,而且网上很多源码,很多代码片。在UI和视觉效果上就会节省很多时间,重复发明轮子没有任何意义。

webview与js交互相关推荐

  1. Android WebView与JS交互入门

    2019独角兽企业重金招聘Python工程师标准>>> 首先在Anndroid代码中对WebView进行初始化 webView = (WebView) findViewById(R. ...

  2. 移动开发周刊:Android ImageView正确使用、WebView与JS交互解析

    写在前面 从 2011 年创建首刊至今,移动开发周刊内容聚焦 Android.iOS.VR/AR 等前沿移动开发技术,精选一周最热点,解读开发技巧,从中希望能够让你有一些收获,如果你有好的文章以及优化 ...

  3. WebView---android webview组件如何使用 Webview与js交互

    浏览器控件是每个开发环境都具备的,这为马甲神功提供了用武之地,windows的有webbrowser,android和ios都有webview.只是其引擎不同,相对于微软的webbrowser,and ...

  4. Flutter:加载本地Html、WebView与JS交互

    本次教程使用的是Flutter官方提供的WebView组件webview_flutter 2.3.1,flutter_android 2.2.1 一. WebView介绍 以下为Flutter Web ...

  5. ios webview html交互 卡死,iOS 之webview 的js交互(alert、confirm、prompt)弹窗造成界面卡死...

    概述:当iOS客户端中webView 与js交互,在主线程执行js脚本时,而js脚本存在alert().confirm().prompt()这三种弹窗时会造成iOS界面卡死. 1.造成卡死时的代码如下 ...

  6. Android WebView 与 JS 交互

    2019独角兽企业重金招聘Python工程师标准>>> 在android activity webView的使用,activity中执行html中的js 方法, 和在html 中 调 ...

  7. Android—WebView与JS交互

    Html文件: WebView与JS交互方式: 1. 前提: WebSettings webSettings = webView.getSettings(); // 设置与Js交互的权限 webSet ...

  8. Android之webview与js交互

    对于android初学者应该都了解webView这个组件.之前我也是对其进行了一些简单的了解,但是在一个项目中不得不用webview的时候,发现了webview的强大之处,今天就分享一下使用webvi ...

  9. Android开发-Android原生与WebView的js交互的实现

    前 言 一般在Android应用的开发过程中,一些核心的业务功能开发往往需要Android原生的开发,一些需要改动比较频繁的功能且不是核心的业务功能往往只需要在Android应用调用一个网页就行了.在 ...

最新文章

  1. 阿里古谦:阿里互联网架构的6大最佳实践
  2. gets与fgets,puts与fputs区别
  3. 分布式事务科普(初识篇)
  4. Shell 控制并发
  5. 二分+最大化最小值 River Hopscotch POJ - 3258
  6. struts单例模式 java_Java单例设计模式详细介绍
  7. php 5.4.5,PHP 5.4.5 公布
  8. spring-mvc.xml与spring-mybatis.xml配置文件中命名空间问题
  9. 部门树_神奇!十堰这个小山村竟然藏着两棵500多年的爱情树!
  10. JavaSE基础——IO流详解(2)其他常用的流和Properties 集合
  11. mysql查看enum和set值_mysql中的enum和set类型_MySQL
  12. 几种简易APP制作方式!自留!
  13. 如何快速在线生成latex table表格
  14. 地理信息三维可视化技术在城市规划中的应用
  15. 固态硬盘坏了怎么恢复数据恢复
  16. Linux下useradd命令与adduser命令的区别(adduser更适合初级使用者,useradd比较适合有些高阶经验的使用者)
  17. 什么是弹性云服务器?
  18. 北漂程序员一天的生活
  19. 飞行控制系统中速度的表示
  20. 杰奇采集分页 php,杰奇自定义分页代码,教程及案例

热门文章

  1. boost::statechart模块测量 BitMachine 的事件处理性能的测试程序
  2. boost::spirit模块实现使用迭代器位置注释 AST的测试程序
  3. boost::shared_from_raw相关的测试程序
  4. boost::BoostRegexConcept相关的测试程序
  5. boost::multi_array模块实现index_base 修改工具的测试
  6. boost::geometry::partition用法的测试程序
  7. GDCM:gdcm::SequenceOfItems的测试程序
  8. GDCM:基本应用程序级别机密性配置文件测试程序
  9. boost::core模块实现np地址
  10. ITK:在傅立叶域中过滤图像