Android中内置了WebKit模块,而该模块的Java层视图类就是WebView,所有需要使用Web浏览器功能的Android都需要创建该视图类对象显示和处理请求的网络资源。目前WebKit支持Http、Https、Ftp和JavaScript请求。下面我们重点看一下如何在Android中调用JavaScript方法以及如何在js中调用本地方法。

1、在Assets下放一个简单的html文件jstest.html

[html] view plain copy
  1. >  
  2. <HTML>  
  3. <HEAD>  
  4. <meta name="viewport" content="width=device-width, target-densitydpi=device-dpi" />  
  5. <META http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  6. <script>  
  7.    function showMsg(){  
  8.       alert("hello world!");  
  9.    }  
  10.    function showMsgInAndroid(){  
  11.       myjs.showMsg('hello in android!');  
  12.    }  
  13. script>  
  14. HEAD>  
  15. <BODY>  
  16. <span>测试js使用span>  
  17.   
  18. <button id='btntest' onclick='showMsgInAndroid()'>调用android方法button>  
  19. BODY>  
  20. HTML>  

2、布局文件main.xml

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout  
  3.     android:id="@+id/rl_main"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     xmlns:android="http://schemas.android.com/apk/res/android"  
  7.     >  
  8.    <WebView   
  9.        android:id="@+id/wv_test"  
  10.        android:layout_width="fill_parent"  
  11.        android:layout_height="fill_parent"  
  12.        android:layout_above="@+id/btn_showmsg"/>  
  13.    <Button   
  14.        android:id="@+id/btn_showmsg"  
  15.        android:layout_width="200dip"  
  16.        android:layout_height="40dip"  
  17.        android:layout_alignParentBottom="true"  
  18.        android:layout_centerHorizontal="true"  
  19.        android:text="调用html中js方法"/>  
  20. RelativeLayout>  

3、然后是Activity,MainActivity.java

[java] view plain copy
  1. package com.harold.jstest;  
  2.   
  3. import com.harold.base.JSKit;  
  4.   
  5. import android.app.Activity;  
  6. import android.os.Bundle;  
  7. import android.os.Handler;  
  8. import android.view.View;  
  9. import android.view.View.OnClickListener;  
  10. import android.webkit.WebChromeClient;  
  11. import android.webkit.WebView;  
  12. import android.widget.Button;  
  13.   
  14. public class MainActivity extends Activity {  
  15.       
  16.     private WebView mWebView;  
  17.     private Button btnShowInfo;  
  18.     private JSKit js;  
  19.     private Handler mHandler = new Handler();  
  20.   
  21.     @Override  
  22.     protected void onCreate(Bundle savedInstanceState) {  
  23.         super.onCreate(savedInstanceState);  
  24.         setContentView(R.layout.main);  
  25.         //初始化控件  
  26.         mWebView = (WebView) findViewById(R.id.wv_test);  
  27.         btnShowInfo = (Button) findViewById(R.id.btn_showmsg);  
  28.         //实例化js对象  
  29.         js = new JSKit(this);  
  30.         //设置参数  
  31.         mWebView.getSettings().setBuiltInZoomControls(true);  
  32.         //内容的渲染需要webviewChromClient去实现,设置webviewChromClient基类,解决js中alert不弹出的问题和其他内容渲染问题  
  33.         mWebView.setWebChromeClient(new WebChromeClient());  
  34.         mWebView.getSettings().setJavaScriptEnabled(true);  
  35.         //把js绑定到全局的myjs上,myjs的作用域是全局的,初始化后可随处使用  
  36.         mWebView.addJavascriptInterface(js, "myjs");  
  37.           
  38.         mWebView.loadUrl("file:///android_asset/jstest.html");  
  39.           
  40.         btnShowInfo.setOnClickListener(new OnClickListener() {  
  41.               
  42.             @Override  
  43.             public void onClick(View v) {  
  44.                 mHandler.post(new Runnable() {  
  45.                     @Override  
  46.                     public void run() {  
  47.                         //调用 HTML 中的javaScript 函数  
  48.                         mWebView.loadUrl("javascript:showMsg()");  
  49.                     }  
  50.                 });  
  51.             }  
  52.         });  
  53.     }  
  54.   
  55. }  

4、最后是绑定全局js的类 JSKit.java
[java] view plain copy
  1. package com.harold.base;  
  2.   
  3. import android.widget.Toast;  
  4.   
  5. import com.harold.jstest.MainActivity;  
  6.   
  7. public class JSKit {  
  8.     private MainActivity ma;  
  9.       
  10.     public JSKit(MainActivity context) {  
  11.         this.ma = context;  
  12.     }  
  13.       
  14.     public void showMsg(String msg) {  
  15.         Toast.makeText(ma, msg, Toast.LENGTH_SHORT).show();  
  16.     }  
  17. }  

例子比较简单,代码里都加了注释,这里就不多说了,本示例用的本地的html,如果访问网络中的网页,别忘记在AndroidManifest.xml中加权限

[html] view plain copy
  1. <uses-permission android:name="android.permission.INTERNET"/>  
源码在下面:

------> 源码下载<------

更多相关文章

  1. Linux下的Android电话管理软件――QtADB(安装启动方法)
  2. Android:绘制自定义视图
  3. Android adb功能使用方法
  4. Android 4.4 全套源码及子模块源码的下载方法
  5. android解析XML文件的三方法之SAX
  6. android 使用Application保存全局变量
  7. Android 4.4 Dialog 被状态栏遮挡的解决方法

随机推荐

  1. Android webview listview 判断到底
  2. android 开发 checkBox的显示和隐藏
  3. Android NDK使用常见错误
  4. Android初学者的一些学习网址
  5. Android中NFC功能流程图解析及代码演示『
  6. android 关闭和管理所有的ACTIVITY或者是
  7. android studio 离线升级
  8. Android Studio:64K问题com.android.dex.
  9. Android - 服务器json数据交互.
  10. android常用的工具类——将图形变成圆形