博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我的第一个 Mono for Android 应用
阅读量:4313 次
发布时间:2019-06-06

本文共 5135 字,大约阅读时间需要 17 分钟。

创建 Mono for Android 应用

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

Create first Mono for Android Application

熟悉默认项目模板

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

  • 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 , 如下图所示:

Create new 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 , 如下图所示:

Create Android Layout

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

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

Main Activity

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

this.SetContentView(Resource.Layout.MainActivityLayout);

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

Second Activity Layout

使用 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

再打开 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
(Resource.Id.MessageTextView); textView.Text = msg;}

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

MainActivity

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

SecondActivity

总结

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

所有文章遵循,要求署名、非商业 、保持一致。在满足的基础上可以转载,但请以超链接形式注明出处。

本博客已经迁移到 GitHub , 围观地址: 

转载于:https://www.cnblogs.com/CharlesGrant/p/3659700.html

你可能感兴趣的文章
文件拷贝(IFileOperation::CopyItem)
查看>>
MapReduce的 Speculative Execution机制
查看>>
大数据学习之路------借助HDP SANDBOX开始学习
查看>>
Hadoop基础学习:基于Hortonworks HDP
查看>>
为什么linux安装程序 都要放到/usr/local目录下
查看>>
Hive安装前扫盲之Derby和Metastore
查看>>
永久修改PATH环境变量的几种办法
查看>>
大数据学习之HDP SANDBOX开始学习
查看>>
Hive Beeline使用
查看>>
Centos6安装图形界面(hdp不需要,hdp直接从github上下载数据即可)
查看>>
CentOS7 中把yum源更换成163源
查看>>
关于yum Error: Cannot retrieve repository metadata (repomd.xml) for repository:xxxxxx.
查看>>
2020-11-18
查看>>
Docker面试题(二)
查看>>
【NOI 2018】归程(Kruskal重构树)
查看>>
注册用户
查看>>
TZC Intercommunication System
查看>>
HDU 4571 SPFA+DP
查看>>
centos 创建以日期为名的文件夹
查看>>
Java Timer触发定时器
查看>>