Hello, Android
Android 開發與 Xamarin 簡介
在這兩節指南中,我們將 (使用 Xamarin Studio或 Visual Studio)建立我們的第一個 Xamarin.Android 應用程序 並理解使用Xamarin 開發Android 應用程序的基本原理的。在這個系列,我們將介紹有關工具的使用、 Android開發相關的概念、構建和部署 Xamarin.Android 的應用程序所需的步驟。
Hello, Android 快速入門
在本演練中,我們要創建一個將字母和數字轉換成電話號碼的應用程序,由用戶輸入包含字母和數字的電話號碼,然後將用戶輸入內容轉換爲電話號碼,並撥打電話。最終的應用程序看起來像這樣 ︰
讓我們開始吧 !
要求
Xamarin.Android 適用於以下任何設置 ︰
- OS X Yosemite 上最新版本的 Xamarin Studio 及以上
- Windows 7 上最新版本的 Xamarin Studio 及以上。
- Windows 7 和上述 Visual Studio 2012 專業版或更高。
本演練假定 你已經安裝了最新版的Xamarin.Android。安裝 Xamarin.Android 的指南,請參閱Xamarin.Android 安裝指南。在我們開始之前,請下載並解壓縮Xamarin 應用程序圖標和啓動屏幕設置。
配置模擬器
Android 有模擬器的幾個選項。標準的 Android 模擬器的設置最簡單,但跑得慢。Xamarin 建議你使用高性能Xamarin 安卓高清播放器。如果您不使用 Xamarin 安卓高清播放器,您應該配置仿真程序使用硬件加速。配置硬件加速的說明是在加速 Android 模擬器指南 》 中提供的。
演練
(IOS系統的解說跳過,需要的請瀏覽官網)
-
讓我們來啓動 Visual Studio ︰
-
單擊開始 > 新項目創建一個新的項目 ︰
-
在新建項目對話框中,單擊Visual C# > Android,選擇空白的應用程序 (Android)模板。我們將新項目命名爲
Phoneword
。單擊確定以創建新的項目 ︰ -
創建新項目後,讓我們展開解決方案資源管理器下的Resources 文件夾和layout文件夾,然後雙擊Main.axml文件,這個文件將會在 Android 設計器中打開。這是我們的屏幕的佈局文件 ︰
-
在設計界面選擇Hello,World, Click Me! 按下Delete鍵刪除它。在工具箱(右側的區域)的搜索字段中輸入
text
並將 Text (Large) 部件拖到設計界面(在中心區域) ︰ -
修改Text(Large)控件的Text屬性爲
Enter a Phoneword:
如下圖所示 ︰
-
接下來,讓我們從工具箱拖一個 Plain Text 部件動到設計界面,並將其放置在Text(Large)控件下面。注意,我們可以使用搜索字段來幫助定位窗體部件的名稱 ︰
-
修改Plain Text控件的
id
屬性爲@+id/PhoneNumberText,
text
屬性更改爲1-855-XAMARIN
: -
從工具箱一個按鈕從拖動到設計界面,把它放在純文本小部件下面 ︰
-
更改該按鈕的
Id
屬性爲@+id/TranslateButton
,Text
屬性更改爲Translate
: -
接下來,從工具箱拖動第二個按鈕到Translate按鈕下 ︰
-
在設計界面上選擇該按鈕,更改它的
Id
屬性爲@+id/CallButton
,Text
屬性更改爲Call
:按Ctrl+s報存。
-
現在,讓我們添加一些代碼來實現將字母和數字翻譯爲純數字電話號碼的功能。我們會添加新文件到項目,在旁邊的解決方案中右鍵點擊Phoneword項目,然後選擇添加 > 新文件...:
-
在添加新項對話框中,選擇Visual C# > 代碼 將新添加的代碼文件進行命名爲PhoneTranslator.cs:
-
我們創建了一個空的 C# 類。將PhoneTranslator.cs的代碼替換爲下面的代碼 ︰
-
using System.Text; using System; namespace Core { public static class PhonewordTranslator { public static string ToNumber(string raw) { if (string.IsNullOrWhiteSpace(raw)) return ""; else raw = raw.ToUpperInvariant(); var newNumber = new StringBuilder(); foreach (var c in raw) { if (" -0123456789".Contains(c)) newNumber.Append(c); else { var result = TranslateToNumber(c); if (result != null) newNumber.Append(result); } // otherwise we've skipped a non-numeric char } return newNumber.ToString(); } static bool Contains (this string keyString, char c) { return keyString.IndexOf(c) >= 0; } static int? TranslateToNumber(char c) { if ("ABC".Contains(c)) return 2; else if ("DEF".Contains(c)) return 3; else if ("GHI".Contains(c)) return 4; else if ("JKL".Contains(c)) return 5; else if ("MNO".Contains(c)) return 6; else if ("PQRS".Contains(c)) return 7; else if ("TUV".Contains(c)) return 8; else if ("WXYZ".Contains(c)) return 9; return null; } } }
按CTRL+S保存,然後關閉該文件。確保重新生成解決方案時沒有編譯時錯誤。
-
接下來我們要添加用戶界面上的代碼。將下面的代碼添加到
MainActivity
類。在解決方案資源管理器雙擊MainActivity.cs將其打開 ︰ -
我們開始處理翻譯按鈕。在
MainActivity
類中,找到OnCreate
方法。我們將在OnCreate方法裏的最後一行添加代碼
。刪除模板生成的按鈕處理代碼,按照下面的代碼修改OnCreate
方法 ︰using System; using Android.App; using Android.Content; using Android.Runtime; using Android.Views; using Android.Widget; using Android.OS; namespace Phoneword { [Activity (Label = "Phoneword", MainLauncher = true)] public class MainActivity : Activity { protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); // Set our view from the "main" layout resource SetContentView (Resource.Layout.Main); // Our code will go here } } }
-
接下來,我們需要獲取我們在 Android 設計器中添加的那些控件的引用。
在
OnCreate
方法中的SetContentView (Resource.Layout.Main);
這句代碼後面添加
如下代碼 ︰// Get our UI controls from the loaded layout: EditText phoneNumberText = FindViewById<EditText>(Resource.Id.PhoneNumberText); Button translateButton = FindViewById<Button>(Resource.Id.TranslateButton); Button callButton = FindViewById<Button>(Resource.Id.CallButton);
-
現在讓我們添加響應用觸摸TranslateButton按鈕時的代碼。將下面的代碼添加到
OnCreate
方法 (我們在最後一步中添加的那行後面) ︰// Disable the "Call" button callButton.Enabled = false; // Add code to translate number string translatedNumber = string.Empty; translateButton.Click += (object sender, EventArgs e) => { // Translate user's alphanumeric phone number to numeric translatedNumber = Core.PhonewordTranslator.ToNumber(phoneNumberText.Text); if (String.IsNullOrWhiteSpace(translatedNumber)) { callButton.Text = "Call"; callButton.Enabled = false; } else { callButton.Text = "Call " + translatedNumber; callButton.Enabled = true; } };
-
接下來讓我們添加響應用戶按Call按鈕時的代碼。我們將下面的代碼 TranslateButton的後面 ︰
callButton.Click += (object sender, EventArgs e) => { // On "Call" button click, try to dial phone number. var callDialog = new AlertDialog.Builder(this); callDialog.SetMessage("Call " + translatedNumber + "?"); callDialog.SetNeutralButton("Call", delegate { // Create intent to dial phone var callIntent = new Intent(Intent.ActionCall); callIntent.SetData(Android.Net.Uri.Parse("tel:" + translatedNumber)); StartActivity(callIntent); }); callDialog.SetNegativeButton("Cancel", delegate { }); // Show the alert dialog to the user and wait for response. callDialog.Show(); };
-
最後,讓我們給我們的應用程序添加撥打電話的權限。我們可以在Android Manifest界面編輯應用程序權限。在解決方案資源管理器中雙擊Phoneword 下的Properties進入屬性頁,然後選擇Android 清單頁面 ︰
添加所需的權限,我們這裏只用到了打電話的權限,只勾選CALL_PHONE權限 就可以︰
-
保存並生成解決方案,我們會在 Visual Studio 的左下角看到一條成功消息 ︰
如果有錯誤,我們可以通過前面的步驟,改正錯誤,直到應用程序生成成功。如果你在生成項目時碰到了像 資源在當前上下文中不存在 錯誤,請確認MainActivity.cs中的命名空間名稱與項目名稱 (
Phoneword
)是否一致,然後重新生成解決方案。如果仍然會生成錯誤,請驗證您已經安裝了最新的 Xamarin.Android 更新。 -
我們現在有一個工作應用程序 — — 到了最後的潤色的時間 !讓我們開始爲我們的
MainActivity
編輯Label
。Label顯示在安卓系統屏幕的頂部,目的是爲了讓用戶知道他們現在正在使用哪個應用。
在MainActivity
類的頂部,更改Label的值
爲Phone Word
就像下面這樣 ︰namespace Phoneword { [Activity (Label = "Phone Word", MainLauncher = true)] public class MainActivity : Activity { ... } }
-
接下來,讓我們設置的應用程序圖標。首先,下載並解壓的Xamarin 應用程序圖標設置。下一步,打開Resources文件夾下的drawable文件夾刪除裏面的Icon.png文件:
當顯示下面的對話框時,單擊確定:
-
接下來,讓我們用鼠標右鍵單擊drawable文件夾並選擇添加 > 現有項目...:
-
從選擇我們已經解壓縮後的 Xamarin 應用程序圖標目錄並打開drawable文件夾。選擇Icon.png ,並單擊添加:
-
接下來,讓我們添加其餘的 Xamarin 應用程序圖標drawable-* 文件夾到項目裏。這些文件夾提供不同分辨率的圖標,它可以適應不同設備上的不同分辨率。在文件資源管理器窗口中,定位到解壓縮後的 Xamarin 應用程序圖標目錄並選擇drawable-*文件夾 ︰
將這些文件夾拖到 Visual Studio解決方案資源管理器窗格中的資源文件夾中。這些文件夾現在屬於您的項目的一部分了,如圖 ︰
-
接下來,讓我們在 Android Manifest 中指定應用程序圖標,通過從應用程序圖標下拉菜單中選擇
@drawable/Icon
: -
最後,我們可以通過將它部署到模擬器來測試我們的應用程序。如果尚未配置仿真程序,請參閱安裝說明Xamarin 安卓高清播放器。如果您使用谷歌安卓系統仿真器,請參閱加速 Android 模擬器提高仿真性能的提示。
<譯者注>如果按這裏的教程不能運行安卓模擬器的話,聽我的,別糾結,拿起你的手機,進入開發者,打開usb調試,插上usb 連接到電腦,然後點擊啓動就可以在真機上調試了。或者使用微軟的安卓模擬器。怎麼啓動微軟的安卓模擬器就不講了。啓動後在模擬器的無線=》高級屬性中 找出模擬器的ip地址,點擊下圖中紅框的地方 打開Android Adb Command ,運行命令: 【adb connect 192.168.xx.xx(你要連接的模擬器的ip地址)】 端口號可以省略,下面是這個命令的幫助。
connect <host>[:<port>] - connect to a device via TCP/IP讓我們打開 Xamarin 安卓高清播放器設備管理器中,通過單擊工具欄中的圖標管理虛擬設備 (XAP) :
在 Xamarin 安卓高清播放器設備管理器中,讓我們下載、 安裝,並啓動Nexus 5 (Kitkat) (Android 4.4.2 API 級別 19) 虛擬設備 ︰
我們將我們的應用程序發送到這個模擬器之前,讓我們來配置應用程序運行需要的最低 Android 版本,它將在我們選定的虛擬設備上運行。在 Visual Studio 中打開應用程序頁的屬性。Minimum Android to target:︰選擇 API 級別 19 (有關 Android API 級別的詳細信息,請參閱瞭解 Android API 級別).
接下來,讓我們點擊工具欄上的下拉菜單將我們的應用程序部署到Nexus 5 (Kitkat)設備上如下所示 ︰
在安裝和啓動我們的應用程序之前,Visual Studio 會將文件複製到此仿真程序。
-
下面的截圖說明Phoneword應用程序已經在 Xamarin Android Player中運行了。Phone Word 標籤前面顯示的圖標就是我們在
MainActivity
中配置的圖標。單擊Translate 按鈕,將會更改Call按鈕的文本。這時點擊Call按鈕將會彈出撥打電話的對話框。如下圖所示 ︰
祝賀您完成您第一次的 Xamarin.Android 應用程序 !現在到了剖析技術的時候了,我們將在你好,Android 的深入中進行講解.