创建 Mono for Android 应用

打开 MonoDevelop , 选择新建解决方案, 左边的分类选择 "Mono for Android" , 右边选择 "Mono for Android Application" , 使用默认的模板新建一个 Mono for Android 应用程序, 如下图所示, 项目名称为 “MyFirstApp” 。

熟悉默认项目模板

现在, 先不要做其它的, 先来熟悉一下这个项目, 打开项目属性对话框, 看看每个节点都有什么设置项, 重点熟悉下面几个节点:

  • Build/General , 选择 Target Framework ,设置编译应用使用的 Android SDK 版本;
  • Build/Mono for Android Build , 设置如 Linker 、 部署方式、 以及高级标签下的的 CPU架构、 国际化等;
  • Build/Mono for Android Application , 设置应用程序信息, 也就是 AndroidManifest.xml 文件的信息;

项目默认的目录结构如下如所示:

注意 Assets 和 Resource 目录:

Assets 目录, 如果应用需要用到二进制资源文件, 比如特殊字体、声音等, 放在这个目录下, 并将 BuildAction 设置为 AndrioidAsset , 资源将会和应用程序一起部署, 在运行时可以通过 AssetManager 使用类似下面的代码进行访问:

public class ReadAsset : Activity
{
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
InputStream input = Assets.Open ("my_asset.txt");
}
}

另外,字体文件可以这样加载:

Typeface tf = Typeface.CreateFromAsset(
Context.Assets, "fonts/samplefont.ttf");

Resource 目录, 包含应用程序所需的图片、 布局描述、 二进制文件和字符串字典等资源文件。 比如, 一个简单的 Android 应用包含一个界面描述文件 (main.axml) , 一个国际化的字符串字典 (strings.xml) 以及图标 (icon.png) , 这些文件按照下面的结构保存在 “Resource” 目录内:

Resources/
drawable/
icon.png
layout/
main.axml
values/
strings.xml

为了让编译系统能够将资源文件识别出 Android 资源, 需要将其编译动作 (Build Action) 设置为 “Android Resource”。 上面的目录结构经过编译之后, 将会生成类似下面的文件:

public class Resource {

    public class Drawable {
public const int icon = 0x123;
} public class Layout {
public const int main = 0x456;
} public class Strings {
public const int FirstString = 0xabc;
public const int SecondString = 0xbcd;
}
}

使用 Resource.Drawable.icon 可以引用 drawable/icon 文件, Resource.Layout.main 可以引用 /layout/main.axml 文件, 而使用Resource.Strings.FirstString 则可以引用 values/strings.xml 文件中的第一个字符串。

以上这些和 Android SDK 文档中介绍的都是大同小异的, 在 Mono for Android 环境下又加上了一些 .Net 特有的风格而已, 对于有经验的 .Net 开发人员来说, 一看就懂了。

创建 Activity 及 View

与其它平台的应用程序不同, 这些平台上的应用程序通常都有一个单一的入口 main 函数, 应用程序都由这个入口函数启动, 创建窗口、 维护界面。 而 Android 程序则不同, 一个 Android 程序由一些松散的 Activity 提供的界面组成, 因此看起来有点儿像 Web 应用程序, 任何一个 Activity 都可以通过 URL 启动。

现在来新建一个 Activity , 在菜单栏上选择 File -> New -> File , 在弹出的新建文件对话框中选择 Android Activity , 如下图所示:

新建的 Activity 的代码如下:

[Activity(Label = "MyFirstApp", MainLauncher = true)]
public class MainActivity : Activity { protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
} }

注意 MainActivity 的 ActivityAttribute 标记, 这里指定了两个属性, Label="MyFirstApp" 表示 Activity 的显示名称, MainLauncher=true 表示在应用程序列表中显示, 在编译时, Mono for Android 会根据这些标记生成一个 AndroidManifest.xml , 并打包倒最终的 Android 应用程序中。

现在来创建 MainActivity 的视图, 先选中项目的 Resources/layout 目录, 在菜单栏上选择 File -> New -> File , 在弹出的新建文件对话框中选择 Android Layout , 如下图所示:

文件名输入 MainActivityLayout , MonoDevelop 默认会打开设计视图, 先切换到代码视图, 粘贴下面的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/MessageEditText"
android:layout_weight="1"
android:hint="@string/MessageEditTextHint" />
<Button
android:text="@string/SendButtonText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/SendButton" />
</LinearLayout>

然后切换到设计视图, 看起来如下图所示:

在 MainActivity.cs 文件中的 base.OnCreate(bundle) 下面加入下面一句代码, 让 MainActivity 使用 MainActivityLayout :

this.SetContentView(Resource.Layout.MainActivityLayout);

用同样的方法, 创建 SecondActivity 以及 SecondActivityLayout , SecondActivityLayout 的代码以及设计界面如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/MessageTextView" />
</LinearLayout>

使用 Intent 启动 Activity 并传递参数

如果现在运行程序, 将只能看到 MainActivity , 看不到 SecondActivity , 如果要想启动 SecondActivity , 就需要用到 Intent 。 Android 通过 Intent 来启动 Activity , 以及在 Activity 之间传递参数。

打开 MainActivity , 添加一些代码, 使其看起来如下所示:

[Activity(Label = "MyFirstApp", MainLauncher = true)]
public class MainActivity : Activity { public const string ExtraMessage = "Cn.Beginor.MyFirstApp.MainActivity.ExtraMessage"; protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
// 设置布局文件
this.SetContentView(Resource.Layout.MainActivityLayout);
var sendBtn = this.FindViewById<Button>(Resource.Id.SendButton);
// 为发送按钮添加事件处理函数
sendBtn.Click += SendButtonClick;
} void SendButtonClick (object sender, EventArgs e) {
// 获取用户输入的信息
var msgEditText = this.FindViewById<EditText>(Resource.Id.MessageEditText);
if (msgEditText == null) {
return;
}
var msg = msgEditText.Text;
// 创建 Intent 并传递用户输入的信息
var intent = new Intent(this, typeof(SecondActivity));
intent.PutExtra(ExtraMessage, msg);
// 启动第二个 Activity
this.StartActivity(intent);
}
}

再打开 SecondActivity , 添加接收 ExtraMessage 并显示的代码:

protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
// 设置布局文件
this.SetContentView(Resource.Layout.SecondActivityLayout);
// 从 Intent 中获取 ExtraMessage
var intent = this.Intent;
var msg = intent.GetStringExtra(MainActivity.ExtraMessage);
// 将 ExtraMessage 显示在 TextView 上
var textView = this.FindViewById<TextView>(Resource.Id.MessageTextView);
textView.Text = msg;
}

现在运行这个程序, 可以看到首先启动的是 MainActivity , 显示界面如下:

点击 Send 按钮, 会启动 SecondActivity , 并将输入的信息显示在界面上:

总结

Mono for Android 初体验感觉不错, 对于有经验的 .Net 开发人员来讲, 上手的速度非常快, 只要稍微学习一下 Android 的 UI 方面的知识就可以了。 MonoDevelop 的界面和 VS 很相似, 上手也是很容易的事情。 还是那句话, Mono for Android 最大的好处是可以利用现有的 .Net 代码, CodePlex 以及 Github 上有丰富的资源可以利用, 如果你熟悉 .Net 开发, Mono for Android 也是值得一试的。

张志敏所有文章遵循创作共用版权协议,要求署名、非商业 、保持一致。在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。

本博客已经迁移到 GitHub , 围观地址: http://beginor.github.io/

我的第一个 Mono for Android 应用的更多相关文章

  1. mono for android 获取手机照片或拍照并裁剪保存

    axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...

  2. mono for android Json 上传文件

    void button_Click(object sender, EventArgs e) { string Url = "上传地址,服务器端负责接收"; byte[] fbyte ...

  3. mono for android 用ISharedPreferences 进行状态保持 会话保持 应用程序首选项保存

    由于项目需要 要保持用户登录状态 要进行状态保持 用途就好像asp.net的session一样 登录的时候进行保存 ISharedPreferences shared = GetSharedPrefe ...

  4. mono for android 自定义titleBar Actionbar 顶部导航栏 修改 样式 学习

    以前的我是没有做笔记的习惯的,学习了后觉得自己能记住,但是最近发现很多学的东西都忘记了,所有现在一有新的知识,就记下来吧. 最近又做一个mono for android 的项目 这次调整比较大,上次做 ...

  5. Mono For Android 之 配置环境

    下载 Xamarin Mono For Android 4.6.07004 完整离线破解版 (包括除 Android SDK 外的所有文件) Android SDK. 资源源自 http://www. ...

  6. Android(4)—Mono For Android 第一个App应用程序

    0.前言 年前就计划着写这篇博客,总结一下自己做的第一个App,却一直被新项目所累,今天抽空把它写完,记录并回顾一下相关知识点,也为刚学习Mono的同学提供佐证->C#也是开发Android的! ...

  7. 【月入41万】Mono For Android中使用百度地图SDK

    借助于Mono For Android技术,.Net开发者也可以使用自己熟悉的C#语言以及.Net来开发Android应用.由于Mono For Android把Android SDK中绝大部分类库都 ...

  8. Android(1)—Mono For Android 环境搭建及破解

    0.前言 最近公司打算开发一款Android平台的简单报表查询软件,因本人之前一直是.NET开发的,和领导商定之后决定采用Mono For Android 进行开发,暂时采用破解版进行开发: 下文是记 ...

  9. mono for android学习过程系列教程(1)

    直接进入主题,关于mono for android的学习,首先配置好环境,如何配置环境,度娘谷歌一大堆,记得使用破解版. 我自己是百度“黑马四期”传智播客的视频,里面有破解版开发环境的软件. 今天直接 ...

随机推荐

  1. 运行hexo提示/usr/bin/env: node: 没有那个文件或目录

    由于Ubuntu下已经有一个名叫node的库,因此Node.js在ubuntu下默认叫nodejs,需要额外处理一下. 这个时候需要人为的建立链接,很简单一句话即可! sudo ln -s `whic ...

  2. nyoj 20

    http://acm.nyist.net/JudgeOnline/message.php?msg=已提交&url=status.php%3Fpid%3D20&second=0 #inc ...

  3. swift 中delegate的使用

    今天写了delegate,遇到以下问题: 这里protocol的写法有问题,如果delegate指向一个实现了某个协议对象的引用,在oc里是这样写delegate的类型 id<protocol& ...

  4. Java的++自增

    记得大学刚开始学C语言时,老师就说:自增有两种形式,分别是i++和++i,i++表示的是先赋值后加1,++i是先加1后赋值,这样理解了很多年也没出现问题,直到遇到如下代码,我才怀疑我的理解是不是错了: ...

  5. Java问题排查工具箱[转载]

    转载自:http://hellojava.info/?p=517 作者:阿里毕玄 问题排查除了最重要的解决思路和逻辑推导能力外,工具也是不可缺少的一部分,一个好用的工具可以事半功倍,甚至在某些情况下会 ...

  6. ECSHOP去版权与标志

    前台部分: 1:去掉头部TITLE部分的ECSHOP演示站 Powered by ecshop 前者在后台商店设置 - 商店标题修改 后者打开includes/lib_main.php $page_t ...

  7. Linux网络编程入门 (转载)

    (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...

  8. 一、HTML和CSS基础--网页布局--网页布局基础

    W3C标准: 由万维网联盟制定的一系列标准,包括: 结构化标准语言(HTML和XML) 表现标准语言(CSS) 行为标准语言(DOM和ECMAScript) 倡导结构.样式.行为分离. CSS 规定的 ...

  9. Instruments_Automation使用入门

    Instruments 是应用程序用来动态跟踪和分析 Mac OS X 和 iOS 代码的实用工具. 这是一个灵活而强大的工具,它让你可以跟踪一个或多个进程,并检查收集的数据. 这样,Instrume ...

  10. 查看CPU是否支持虚拟化

    参考:http://www.cnblogs.com/jankie/archive/2012/07/04/2575695.html 一.Windows平台:使用cpu-Z即可查看. 二.Linux平台: ...