一、引言

如今,Android+html5开发已经成为最流行的开发模式。

Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true

Android(Java)与JavaScript(HTML)交互有四种情况:

1) Android(Java)调用HTML中js代码

2) Android(Java)调用HTML中js代码(带参数)

3) HTML中js调用Android(Java)代码

4) HTML中js调用Android(Java)代码(带参数)

二、准备工作

1.添加一个Android项目,在Assets中添加一个名为Test的html文件

2.添加以下html代码到Test.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
<script type="text/javascript">
function javacalljs(){
document.getElementById("content").innerHTML +=
"<br\>java调用了js函数";
} function javacalljswithargs(arg){
document.getElementById("content").innerHTML +=
("<br\>"+arg);
} </script>
</head>
<body>
this is my html <br />
<a onClick="window.Test.startFunction()">点击调用java代码</a><br />
<a onClick="window.Test.startFunction('hello world')">点击调用java代码并传递参数</a>
<br />
<div id="content">内容显示</div>
</body>
</html>

3.删除layout文件夹下的main.axml文件的原油控件,添加以下控件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="9" />
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/msg"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="text" />
</ScrollView>
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="java调用js函数" />
</LinearLayout>

三、代码

1.在MainActivity.cs中删除原来的代码,替换以下代码

 [Activity(Label = "WebService", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity, Button.IOnClickListener//继承按钮的点击接口
{
/// <summary>
/// 定义控件
/// </summary>
public WebView webview;
public TextView msgtext;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
//找到控件
webview = FindViewById<WebView>(Resource.Id.webview);
msgtext = FindViewById<TextView>(Resource.Id.msg); //找到按钮并坚挺点击事件
Button button = FindViewById<Button>(Resource.Id.button);
button.SetOnClickListener(this); webview.Settings.JavaScriptEnabled = true;//设置webserver支持js
webview.AddJavascriptInterface(this, "Test");//添加js接口
webview.LoadUrl("file:///android_asset/Test.html");//加载html的地址
//webview.LoadUrl(this.GetString(Resource.String.Url));//如果我们的html文件实在服务器端则这边可以填服务器端的地址例如127.0.0.1:91/Test.html
}
public void OnClick(View v)
{
// 无参数调用
webview.LoadUrl("javascript:javacalljs()");
// 传递参数调用
webview.LoadUrl("javascript:javacalljswithargs(" + "'hello world'" + ")");
} [Export("startFunction")]
public void startFunction()
{
RunOnUiThread(new Runnable(() =>
{
msgtext.Text = msgtext.Text + "\njs调用了java函数";
}));
}
/// <summary>
/// 当用户调用了这个方法会传递过来一个参数,我们可以获取出来然后用Android的toast显示
/// </summary>
/// <param name="str"></param>
[Export("startFunction")]
public void startFunction(string str)
{
Toast.MakeText(this, str, ToastLength.Short).Show();
RunOnUiThread(new Runnable(() =>
{
msgtext.Text = msgtext.Text + "\njs调用了js函数"+str;
}));
}
}

2.最后在虚拟机上运行,当我们点击“点击调用java代码”的时候在我们程序中多了一行文字,当我们点击“点击调用java代码并传递参数”,程序除了添加了一行文字之外还跳出了提示。当我们点击java调用js函数在我们html页面山会把我们传递的参数显示出来。好了简单的Android和html的交互就是这样。配上项目地址https://github.com/huguodong/WebService

Xamarin.Android 入门之:xamarin使用webserver和html交互的更多相关文章

  1. 【转】Xamarin.Android 入门之:Xamarin+vs2015 环境搭建

    Xamarin.Android 入门之:Xamarin+vs2015 环境搭建   一.前言 此篇博客主要写了如何使用搭建xamarin开发的环境,防止我自己万一哪天电脑重装系统了,可以直接看这篇博客 ...

  2. Xamarin.Android 入门之:Android API版本设置

    一.引言 Xamarin.Android有几个Android API级别设置,确定多个版本的Android应用程序的兼容性.本博客解释了这些设置意味着什么,如何配置它们,以及它们在运行时对您的应用程序 ...

  3. Xamarin.Android 入门之:Xamarin+vs2015 环境搭建

    一.前言 此篇博客主要写了如何使用搭建xamarin开发的环境,防止我自己万一哪天电脑重装系统了,可以直接看这篇博客. 二.准备工作 在安装之前需要下载好xamarin所需要的软件并一个个安装他们: ...

  4. Xamarin.Forms入门-使用 Xamarin.Forms 来创建跨平台的用户界面

    Xamarin.Forms 是一个跨平台的.基于原生控件的UI工具包,开发人员可以轻松的创建适用于 Android,iOS 以及 Windows Phone的用户界面.Xamarin.Forms 通过 ...

  5. Xamarin.Android 入门之:Bind java的jar文件+Android显示gif图片

    一.引言 在xamarin开发的时候,有时我们想要做一个功能,但是这个功能已经有人用java写好了,并且打包成了jar文件.那么我们可以直接把对方的jar文件拿过来用而不是重新用c#写代码. 关于bi ...

  6. Xamarin.Android 入门之:Listview和adapter

    一.引言 不管开发什么软件,列表的使用是必不可少的,而本章我们将学习如何使用Xamarin去实现它,以及如何使用自定义适配器.关于xamarin中listview的基础和适配器可以查看官网https: ...

  7. VS/Xamarin Android入门一

    一.安装和配置(以Visual Studio Pro 2015为例) Visual Studio2015直接提供了这个插件的选择项,稍微提示一下,如果要安装的话,最好准备好十个小时的打算,而且是网速不 ...

  8. Xamarin.Android 入门之:Android的生命周期

    一.前言 活动是Android应用程序的基本构建块,他们可以在许多不同的状态存在.当你把一个Android程序置于后台,过一段时间再打开发现之前的数据还存在. 二.活动状态 下面的图表说明了一个活动可 ...

  9. Xamarin.Android 入门之:Xamarin快速入门

    一. 准备工作 1.新建一个项目取名为phoneword 2.在项目创建好之后,让我们展开“Resources”文件夹然后找到并打开该文件夹下的“layout”文件夹,双击main.axml在Andr ...

随机推荐

  1. mongodb在ubuntu下的couldn‘t remove fs lock errno:9 Bad file descriptor的错误

    按照官网上的安装方法: 在ubuntu系统下有可能出现如下错误: couldn't remove fs lock errno:9 Bad file descriptor 此时需要修改文件所有者 $ s ...

  2. ECSHOP的订单状态在数据库中的表现(order_status, shipping_status, pay_status)

    echop的订单状态都是在ecs_order_info表中的字段里. 订单状态 未确认 取消 确认 已付款 配货中 已发货 已收货 退货 order_status 0 2 1 1 1 5 5 4 sh ...

  3. string和stringBuilder的区别

    曾经被问到过这个问题,回答得不是很好,在网上找了一下,园子里有大神很详细地讨论了二者的区别. http://www.cnblogs.com/yunfeng8967/articles/1093832.h ...

  4. Linux环境下Python的安装过程

    Linux环境下Python的安装过程 前言 一般情况下,Linux都会预装 Python了,但是这个预装的Python版本一般都非常低,很多 Python的新特性都没有,必须重新安装新一点的版本,从 ...

  5. hdu 2837 Calculation 指数循环节套路题

    Calculation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. Makefile之wildcard

    1.wildcard : 扩展通配符2.notdir : 去除路径3.patsubst :替换通配符 例子:建立一个测试目录,在测试目录下建立一个名为sub的子目录$ mkdir test$ cd t ...

  7. CentOS 6.3 配置 yum

    ContOS 配置yum:1.cd /etc/yum.repos.d2.创建个任意目录,将所有文件移动到创建的目录中,除了CentOS-Media.repo3.编辑CentOS-Media.repov ...

  8. 保持iOS上键盘出现时输入框不被覆盖

    如果屏幕中的内容项目比较多,键盘就可能覆盖住文本输入框之类的对象.你必须调整你的内容,使得输入框保持可见. 你会想到哪些处理方法呢? 第一种, 临时调整窗口中各个视图的大小,使得键盘从下向上占领的区域 ...

  9. 将eclipse的应用程序打包成.exe

    转自:http://blog.163.com/loveshijie_1991/blog/static/1760553112012102573437156/ 参考:http://blog.csdn.ne ...

  10. How do disable paging by swiping with finger in ViewPager but still be able to swipe programmatically?

    The more general extension of ViewPager would bet to create a "SetPagingEnabled" method so ...