日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

我的第一个 Mono for Android 应用

發(fā)布時(shí)間:2025/7/14 87 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我的第一个 Mono for Android 应用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我的第一個(gè) Mono for Android 應(yīng)用

Mono for Android 初體驗(yàn), 學(xué)習(xí)怎么使用 Mono for Anrdoid 創(chuàng)建 android 應(yīng)用, 如何使用 Intent 啟動(dòng) Activity , 如何在 Activity 之間傳遞參數(shù)。

準(zhǔn)備開發(fā)環(huán)境

下載并安裝 Mono for Android

在 OSX 系統(tǒng)下準(zhǔn)備 Mono for Android 開發(fā)環(huán)境時(shí)比較容易的, 只要去?Xamarin?下載一個(gè)在線安裝程序, 安裝程序會(huì)自動(dòng)下載并安裝所有的文件, 甚至包括 JDK、 Android SDK 等, 沒什么好說的, 一句話, 很簡單。

配置 Android 模擬器

啟動(dòng) MonoDevelop , 在 Tools 菜單下找到點(diǎn)擊 “Open AVD Manager” , 將會(huì)啟動(dòng) “Android Virtual Device Manager”, 創(chuàng)建一個(gè)新的 Android 虛擬設(shè)備, Name 為 Droid4.1, Target 選擇 4.1, SD 卡選擇 256, Skin 選擇內(nèi)置的 WXGA720 , 等等, 一切可以參考 Google 的文檔。

需要注意的是, 要添加一個(gè)硬件選項(xiàng) GPU emulation , 并設(shè)置為 true , 開啟 GPU 模擬, 可以加快模擬器運(yùn)行速度, 否則模擬器運(yùn)行真的會(huì)很慢。

創(chuàng)建好了之后, 先運(yùn)行一下模擬器, 確認(rèn)一切配置正常了, 整個(gè)開發(fā)環(huán)境就算準(zhǔn)備好了。

創(chuàng)建 Mono for Android 應(yīng)用

打開 MonoDevelop , 選擇新建解決方案, 左邊的分類選擇 "Mono for Android" , 右邊選擇 "Mono for Android Application" , 使用默認(rèn)的模板新建一個(gè) Mono for Android 應(yīng)用程序, 如下圖所示, 項(xiàng)目名稱為 “MyFirstApp” 。

熟悉默認(rèn)項(xiàng)目模板

現(xiàn)在, 先不要做其它的, 先來熟悉一下這個(gè)項(xiàng)目, 打開項(xiàng)目屬性對(duì)話框, 看看每個(gè)節(jié)點(diǎn)都有什么設(shè)置項(xiàng), 重點(diǎn)熟悉下面幾個(gè)節(jié)點(diǎn):

  • Build/General , 選擇 Target Framework ,設(shè)置編譯應(yīng)用使用的 Android SDK 版本;
  • Build/Mono for Android Build , 設(shè)置如 Linker 、 部署方式、 以及高級(jí)標(biāo)簽下的的 CPU架構(gòu)、 國際化等;
  • Build/Mono for Android Application , 設(shè)置應(yīng)用程序信息, 也就是 AndroidManifest.xml 文件的信息;

項(xiàng)目默認(rèn)的目錄結(jié)構(gòu)如下如所示:

注意 Assets 和 Resource 目錄:

Assets?目錄, 如果應(yīng)用需要用到二進(jìn)制資源文件, 比如特殊字體、聲音等, 放在這個(gè)目錄下, 并將 BuildAction 設(shè)置為 AndrioidAsset , 資源將會(huì)和應(yīng)用程序一起部署, 在運(yùn)行時(shí)可以通過 AssetManager 使用類似下面的代碼進(jìn)行訪問:

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?目錄, 包含應(yīng)用程序所需的圖片、 布局描述、 二進(jìn)制文件和字符串字典等資源文件。 比如, 一個(gè)簡單的 Android 應(yīng)用包含一個(gè)界面描述文件 (main.axml) , 一個(gè)國際化的字符串字典 (strings.xml) 以及圖標(biāo) (icon.png) , 這些文件按照下面的結(jié)構(gòu)保存在 “Resource” 目錄內(nèi):

Resources/drawable/icon.pnglayout/main.axmlvalues/strings.xml

為了讓編譯系統(tǒng)能夠?qū)①Y源文件識(shí)別出 Android 資源, 需要將其編譯動(dòng)作 (Build Action) 設(shè)置為 “Android Resource”。 上面的目錄結(jié)構(gòu)經(jīng)過編譯之后, 將會(huì)生成類似下面的文件:

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 文件中的第一個(gè)字符串。

以上這些和 Android SDK 文檔中介紹的都是大同小異的, 在 Mono for Android 環(huán)境下又加上了一些 .Net 特有的風(fēng)格而已, 對(duì)于有經(jīng)驗(yàn)的 .Net 開發(fā)人員來說, 一看就懂了。

創(chuàng)建 Activity 及 View

與其它平臺(tái)的應(yīng)用程序不同, 這些平臺(tái)上的應(yīng)用程序通常都有一個(gè)單一的入口 main 函數(shù), 應(yīng)用程序都由這個(gè)入口函數(shù)啟動(dòng), 創(chuàng)建窗口、 維護(hù)界面。 而 Android 程序則不同, 一個(gè) Android 程序由一些松散的 Activity 提供的界面組成, 因此看起來有點(diǎn)兒像 Web 應(yīng)用程序, 任何一個(gè) Activity 都可以通過 URL 啟動(dòng)。

現(xiàn)在來新建一個(gè) Activity , 在菜單欄上選擇 File -> New -> File , 在彈出的新建文件對(duì)話框中選擇 Android Activity , 如下圖所示:

新建的 Activity 的代碼如下:

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

注意 MainActivity 的 ActivityAttribute 標(biāo)記, 這里指定了兩個(gè)屬性,?Label="MyFirstApp"?表示 Activity 的顯示名稱,?MainLauncher=true?表示在應(yīng)用程序列表中顯示, 在編譯時(shí), Mono for Android 會(huì)根據(jù)這些標(biāo)記生成一個(gè) AndroidManifest.xml , 并打包倒最終的 Android 應(yīng)用程序中。

現(xiàn)在來創(chuàng)建 MainActivity 的視圖, 先選中項(xiàng)目的 Resources/layout 目錄, 在菜單欄上選擇 File -> New -> File , 在彈出的新建文件對(duì)話框中選擇 Android Layout , 如下圖所示:

文件名輸入 MainActivityLayout , MonoDevelop 默認(rèn)會(huì)打開設(shè)計(jì)視圖, 先切換到代碼視圖, 粘貼下面的代碼:

<?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"><EditTextandroid:layout_width="0dp"android:layout_height="wrap_content"android:id="@+id/MessageEditText"android:layout_weight="1"android:hint="@string/MessageEditTextHint" /><Buttonandroid:text="@string/SendButtonText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/SendButton" /> </LinearLayout>

然后切換到設(shè)計(jì)視圖, 看起來如下圖所示:

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

this.SetContentView(Resource.Layout.MainActivityLayout);

用同樣的方法, 創(chuàng)建 SecondActivity 以及 SecondActivityLayout , SecondActivityLayout 的代碼以及設(shè)計(jì)界面如下:

<?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"><TextViewandroid:text="Large Text"android:textAppearance="?android:attr/textAppearanceLarge"android:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/MessageTextView" /> </LinearLayout>

使用 Intent 啟動(dòng) Activity 并傳遞參數(shù)

如果現(xiàn)在運(yùn)行程序, 將只能看到 MainActivity , 看不到 SecondActivity , 如果要想啟動(dòng) SecondActivity , 就需要用到 Intent 。 Android 通過 Intent 來啟動(dòng) Activity , 以及在 Activity 之間傳遞參數(shù)。

打開 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);// 設(shè)置布局文件this.SetContentView(Resource.Layout.MainActivityLayout);var sendBtn = this.FindViewById<Button>(Resource.Id.SendButton);// 為發(fā)送按鈕添加事件處理函數(shù)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;// 創(chuàng)建 Intent 并傳遞用戶輸入的信息var intent = new Intent(this, typeof(SecondActivity));intent.PutExtra(ExtraMessage, msg);// 啟動(dòng)第二個(gè) Activitythis.StartActivity(intent);} }

再打開 SecondActivity , 添加接收 ExtraMessage 并顯示的代碼:

protected override void OnCreate(Bundle bundle) {base.OnCreate(bundle);// 設(shè)置布局文件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; }

現(xiàn)在運(yùn)行這個(gè)程序, 可以看到首先啟動(dòng)的是 MainActivity , 顯示界面如下:

點(diǎn)擊 Send 按鈕, 會(huì)啟動(dòng) SecondActivity , 并將輸入的信息顯示在界面上:

總結(jié)

Mono for Android 初體驗(yàn)感覺不錯(cuò), 對(duì)于有經(jīng)驗(yàn)的 .Net 開發(fā)人員來講, 上手的速度非常快, 只要稍微學(xué)習(xí)一下 Android 的 UI 方面的知識(shí)就可以了。 MonoDevelop 的界面和 VS 很相似, 上手也是很容易的事情。 還是那句話, Mono for Android 最大的好處是可以利用現(xiàn)有的 .Net 代碼, CodePlex 以及 Github 上有豐富的資源可以利用, 如果你熟悉 .Net 開發(fā), Mono for Android 也是值得一試的。

張志敏所有文章遵循創(chuàng)作共用版權(quán)協(xié)議,要求署名、非商業(yè) 、保持一致。在滿足創(chuàng)作共用版權(quán)協(xié)議的基礎(chǔ)上可以轉(zhuǎn)載,但請(qǐng)以超鏈接形式注明出處。

本博客已經(jīng)遷移到 GitHub , 圍觀地址:?http://beginor.github.io/


本文轉(zhuǎn)自張志敏博客園博客,原文鏈接:http://www.cnblogs.com/beginor/archive/2012/11/02/2751125.html,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的我的第一个 Mono for Android 应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。