安卓与HTML简单的交互使用

实现通过java代码与HTML的一个互相操作。

准备工作:

1、新建Android工程,在布局文件中添加WebView控件。

2、准备一个HTML文件,放在src/main/assets文件夹下。

3、在java中得到webview,通过loadUrl找到assets下的HTML文件,必须设置webview能使用js(settings.setJavaScriptEnabled(true))加载显示如下效果:

简单的效果实现

一、点击HTML上sayHello按钮,可以得到java代码返回的字符串并显示

1 mWvShow.loadUrl("file:///android_asset/jsandjava.html");
2 mWvShow.addJavascriptInterface(new JsTest(), "jsObj");//将java中类映射到js中   jsObj为该类的一个对象名
JsTest是一个内部类,其中定义的方法与js中button调用的方法名一致。
1         @JavascriptInterface
2         public String sayHello() {
3             return "你好!!!";
4         }


js中封装的sayHello()方法:

1    function sayHello(){
2       var str = window.jsObj.sayHello();
3       document.getElementById("id_input").value = str;
4    }

var str = window.jsObj.sayHello();

通过window得到jsObj对象,通过其调用该类中的方法sayHello(),就可获取java方法中返回的字符串。

在js的button点击时调用方法:

1 <input type="button" value="sayHello" onclick="sayHello()"/>

演示效果:

二、点击HTML上showAndroidButton按钮,可以和activiy交互,让其进行一些UI的操作

因对象映射过一次,不需再次映射。在java中定义showAndroidButton()方法,同样方法名需和js中button调用的一致,即js调用的方法就是通过映射过去的对象调用的java里的方法,所以两者方法名必须一致。因为showAndroidButton()是在js中通过映射的对象来调用,不能直接更新UI需要通过runOnUiThread的方法来更新UI。

1         @JavascriptInterface
2         public void showAndroidButton(){
3             runOnUiThread(new Runnable() {
4                 @Override
5                 public void run() {
6                     btn_test.setVisibility(View.VISIBLE);
7                 }
8             });
9         }

js封装的方法:

通过对象调用类中的方法。

1    function showAndroidButton(){
2        window.jsObj.showAndroidButton();
3    }

HTML中button的定义,调用showAndroidButton()方法:

<input type="button" style="height: 40px "  value="showAndroidButton" onclick="showAndroidButton()"/>

三、点击excuteHtmlFun按钮,调用java内的excuteHtmlFun()方法,方法内调用js定义的showFromHtml(param)方法;

java内部类中的excuteHtmlFun()方法,方法内加载Url:

1         @JavascriptInterface
2         public void excuteHtmlFun(){
3             runOnUiThread(new Runnable() {
4                 @Override
5                 public void run() {
6                     mWvShow.loadUrl("javascript: showFromHtml(‘我很好!‘)");//调用js内的showFromHtml(param)方法
7                 }
8             });
9         }

js的showFromHtml(param)方法:

   function showFromHtml( param ){
        document.getElementById("id_input").value = "Java call Html : " + param;
    }

button内直接调用java类中的方法

1 <input type="button" style="height: 40px " value="excuteHtmlFun" onclick="window.jsObj.excuteHtmlFun()"/>

出现效果就是点击按钮调用java的方法,java方法中使用了js的方法,显示在网页上。

时间: 2024-08-14 09:56:35

安卓与HTML简单的交互使用的相关文章

安卓webview和js+html交互利用的addJavascriptInterface和webview.loadUrl(&quot;javascript:**&quot;);

近期做一个项目需要把一个 服务支持的界面用webview来显示..呀 html白雪了js更是一样啥也不会,相信很多初学屌丝员跟我一样,, html开发工具都不知道怎么写..哈哈哈.....现在把做完的结果分享一下先上图了 ,, 这是从项目中特意分离出来的demo这里之上一些关键代码 源码下载地址  http://download.csdn.net/download/yung7086/7554309 步骤 首先在assets目录下建一个html文件 <!DOCTYPE html PUBLIC &quo

js+html+css实现简单页面交互功能(2015知乎前端笔试题)http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html?from=y1.7-1.2

js+html+css实现简单页面交互功能(2015知乎前端笔试题) http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html?from=y1.7-1.2 密码:hellozhihu

深圳市安卓工控设备有限公司简单介绍

深圳市安卓工控设备有限公司成立于二〇一三年,公司提供专业的行业定制化产品解决方式(基于安卓平台深度定制化解决方式和物联网工业控制解决方式).公司自主研发了KK系列安卓工控主板以及KC系列物联网控制模块等产品. 安卓平台深度定制化解决方式之硬件方案 安卓工控基于嵌入式ARM安卓平台技术,提供专业的软硬件产品和行业定制化解决方式.产品包含工业多点电容式人机界面(HMI),安卓行业平板(可支持NFC,ZIGBEE,3G,GPS等),工控机顶盒,工业设备控制一体机.安卓工控主板等. 安卓平台深度定制化解

Python学习笔记一:简单的交互程序

入门第一课:简单的用户交互程序 1 name = input("Name: ") #Python3.X中的input取代了Python2.X中的input_raw 2 age = int(input("Age: )) #此处若不加int语句,输入时计算机会识别为字符串,为了确保计算机识别为数字,用户也可以输入数字意外的字符.int = integer意为整数 3 job = input("Job: ") 4 salary = input("Sal

[WP8开发] WebBrowser控件与后台代码.cs简单的交互

大前提:我目前测试的环境是Windows Phone 8.1 Silverlight,所以控件是WebBrowser,而不是WebView. 做项目可能要用到网页与后台代码的交互问题,因为可能考虑到跨平台问题,所以公司的网页里某些链接需要客户端自行处理. 有如下HTML示例代码(重要部分): 1 <!--列表标题--> 2 <div class="am-list-news-bd"> 3 <ul class="am-list"> 4

【安卓基础】简单快捷的加载中对话框

遇到的需求 项目中有些界面需要显示加载中,例如登陆界面.注册界面等等.一开始考虑找个第三方库,但是第三方库往往为了达到普遍的适用性,封装得非常复杂.有时候一个库就差不多1mb大小,这样接入成本太大了,况且一个项目还需要其他第三方库接入,如果每一个功能都用第三方库解决,势必导致开发出来的应用体积臃肿,而且难以管理结构. 而我只是需要简单展示一个加载中提示,所以自己实现一个会更加合理,而且更加小巧灵活. 方案的选择 在安卓开发中,系统提供了对话框类用于开发.所以我直接选择使用Support V7的A

PhotoView 实现与图片进行简单的交互

本文的category是根据VIPhotoView来做参考,在此基础上添加个加载网络图片. 此category主要功能是与图片进行交互,双击放大图片,捏合等操作. 感谢vitoziv ! VIPhotoView的github地址:https://github.com/vitoziv/VIPhotoView 本文的category添加了个方法,加载网络图片 /** 显示的图片,提供给外界调用,用于保存图片 */ @property (strong, nonatomic) UIImageView *

Bolts框架在安卓中的简单应用

在新公司的项目中,是由bolts框架来搭建网络请求的,由于之前没有接触过这个框架,因此只能从头看起(其实看下来相对来说我更喜欢用RxJava+Retrofit搭建apps的请求层,but,whatever...),下面的内容很多都是在网上看完资料后自己写Demo来验证获得的,部分是翻译GitHub的Bolts框架的说明文档,也有部分是我自己在网上的教程的基础上自己验证后的代码,如有雷同,纯属巧合. 1.简介 Bolts是一个用于简化移动app开发的轻量级函数库集合,是由Parse和Faceboo

安卓开发之简单的短信操作模块

最近做了一个简单的短信操作模块,比较实用小巧.主要功能是可以发送短信(包括短信发送状态的提示),储存短信(可以用于短信列表显示等等),短信的储存可以用SQLite,不过觉得也就几十条上百条短信,用SQLite未免大材小用,还麻烦,于是决定用SharePreference结合对象序列化来做这个模块. 首先是短信实体类,为了复用,做成抽象类,再具体项目中使用只要继承该抽象类即可: public abstract class Message implements Serializable{ priva