Hello, Android 多重畫面:快速入門
這份含有兩部分的指南會擴充 Phoneword 應用程式來處理第二個畫面。 在此過程中,會介紹基本 Android 應用程式建置組塊,並深入剖析 Android 架構。
在本指南的逐步解說部分中,您將新增第二個畫面至 電話 word 應用程式,以追蹤使用應用程式翻譯的數位歷程記錄。 最終應用程式將具有第二個畫面來顯示「已翻譯」的號碼,如右邉螢幕擷取畫面所示:
所附的深入剖析會檢閱建置的內容並討論架構、導覽和在過程中遇到的其他新 Android 概念。
需求
因為本指南接續 Hello, Android 結束之處,所以它需要您先完成 Hello, Android 快速入門。
逐步解說
在此逐步解說中,您將新增 [Translation History] (翻譯記錄) 畫面到 Phoneword 應用程式。
先在 Visual Studio 開啟 Phoneword 應用程式,並從方案總管編輯 Main.axml 檔案。
提示
較新版的 Visual Studio 支援在 Android Designer 中開啟 .xml 檔案。
Android Designer 同時支援 .axml 和 .xml 檔案。
更新版面配置
從 [工具箱],將按鈕拖曳至設計介面,並將它放置於 TranslatedPhoneWord 文字檢視下方。 在 [屬性] 窗格中,將按鈕 Id 變更為 @+id/TranslationHistoryButton
將按鈕的 Text 屬性設為 @string/translationHistory
。 Android Designer 會按字面解譯它,但您要進行一些變更,讓按鈕的文字可正確顯示:
在方案總管中,展開 [資源] 資料夾下的 [值] 節點,然後連按兩下字串資源檔 Strings.xml:
將 translationHistory
字串名稱和值新增至 Strings.xml 檔案,並加以儲存:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="translationHistory">Translation History</string>
<string name="ApplicationName">Phoneword</string>
</resources>
[Translation History] (翻譯記錄) 按鈕文字應該更新以反映新的字串值:
在設計介面上選取 [Translation History] (翻譯記錄) 按鈕、在 [屬性] 窗格尋找 enabled
設定,並將其值設定為 false
來停用按鈕。 這會導致按鈕在設計介面上變得較暗:
建立第二個活動
建立第二個活動,以啟動第二個畫面。 在 方案總管 中,以滑鼠右鍵按兩下 電話 word 項目,然後選擇 [新增>專案...] :
在 [ 新增專案 ] 對話框中,選擇 [Visual C# > 活動 ],並將 [活動檔案 命名] TranslationHistoryActivity.cs。
使用下列程式碼取代 TranslationHistoryActivity.cs 中的範本程式碼:
using System;
using System.Collections.Generic;
using Android.App;
using Android.OS;
using Android.Widget;
namespace Phoneword
{
[Activity(Label = "@string/translationHistory")]
public class TranslationHistoryActivity : ListActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Create your application here
var phoneNumbers = Intent.Extras.GetStringArrayList("phone_numbers") ?? new string[0];
this.ListAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, phoneNumbers);
}
}
}
在此類別中,您會建立 ListActivity
,然後以程式設計的方式填入它,因此您不需要為這個活動建立新的版面配置檔案。 這會在 Hello, Android 多重畫面深度剖析中更詳細地討論。
新增清單
此應用程式會收集電話號碼 (使用者已在第一個畫面中翻譯),然後將它們傳送至第二個畫面。 電話號碼會儲存為字串清單。 若要支援清單 (及稍後使用的意圖),請將下列 using
指示詞新增至 MainActivity.cs 的頂端:
using System.Collections.Generic;
using Android.Content;
接下來,建立可以填入電話號碼的空白清單。
MainActivity
類別會顯示如下:
[Activity(Label = "Phoneword", MainLauncher = true)]
public class MainActivity : Activity
{
static readonly List<string> phoneNumbers = new List<string>();
...// OnCreate, etc.
}
在 MainActivity
類別中,新增下列程式碼以註冊 [Translation History] (翻譯記錄) 按鈕 (將此行放在 translateButton
宣告之後):
Button translationHistoryButton = FindViewById<Button> (Resource.Id.TranslationHistoryButton);
將下列程式碼新增至 OnCreate
方法的結尾,以連接 [Translation History] (翻譯記錄) 按鈕:
translationHistoryButton.Click += (sender, e) =>
{
var intent = new Intent(this, typeof(TranslationHistoryActivity));
intent.PutStringArrayListExtra("phone_numbers", phoneNumbers);
StartActivity(intent);
};
更新 [翻譯] 按鈕,將電話號碼新增至 phoneNumbers
清單。 translateButton
的 Click
處理常式應類似於下列程式碼:
// Add code to translate number
string translatedNumber = string.Empty;
translateButton.Click += (sender, e) =>
{
// Translate user's alphanumeric phone number to numeric
translatedNumber = Core.PhonewordTranslator.ToNumber(phoneNumberText.Text);
if (string.IsNullOrWhiteSpace(translatedNumber))
{
translatedPhoneWord.Text = "";
}
else
{
translatedPhoneWord.Text = translatedNumber;
phoneNumbers.Add(translatedNumber);
translationHistoryButton.Enabled = true;
}
};
儲存並建置應用程式,以確定沒有任何錯誤。
執行應用程式
將應用程式部署到模擬器或裝置。 下列螢幕擷取畫面說明執行中的 Phoneword 應用程式:
先在 Visual Studio for Mac 開啟 Phoneword 專案,並從 Solution Pad 編輯 Main.axml 檔案。
提示
較新版的 Visual Studio 支援在 Android Designer 中開啟 .xml 檔案。
Android Designer 同時支援 .axml 和 .xml 檔案。
更新版面配置
從 [工具箱],將按鈕拖曳至設計介面,並將它放置於 TranslatedPhoneWord 文字檢視下方。 在 Properties Pad 中,將按鈕識別碼變更為 @+id/TranslationHistoryButton
:
將按鈕的 Text 屬性設為 @string/translationHistory
。 Android Designer 會按字面解譯它,但您要進行一些變更,讓按鈕的文字可正確顯示:
在 Solution Pad 中,展開 [資源] 資料夾下的 [值] 節點,然後連按兩下字串資源檔 Strings.xml:
將 translationHistory
字串名稱和值新增至 Strings.xml 檔案,並加以儲存:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="translationHistory">Translation History</string>
<string name="ApplicationName">Phoneword</string>
</resources>
[Translation History] (翻譯記錄) 按鈕文字應該更新以反映新的字串值:
在設計介面上選取 [Translation History] (翻譯記錄) 按鈕,在 Properties Pad 中開啟 [行為] 索引標籤,然後按兩下 [已啟用] 核取方塊以停用按鈕。 這會導致按鈕在設計介面上變得較暗:
建立第二個活動
建立第二個活動,以啟動第二個畫面。 在 Solution Pad 中,按兩下 電話 word 專案旁的灰色齒輪圖示,然後選擇 [新增>檔案...] :
從 [ 新增檔案 ] 對話框中,選擇 [Android > 活動],將 [活動 TranslationHistoryActivity
命名] ,然後按兩下 [ 新增]。
使用下列程式碼取代 TranslationHistoryActivity
中的範本程式碼:
using System;
using System.Collections.Generic;
using Android.App;
using Android.OS;
using Android.Widget;
namespace Phoneword
{
[Activity(Label = "@string/translationHistory")]
public class TranslationHistoryActivity : ListActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Create your application here
var phoneNumbers = Intent.Extras.GetStringArrayList("phone_numbers") ?? new string[0];
this.ListAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, phoneNumbers);
}
}
}
在此類別中,會建立 ListActivity
,然後以程式設計的方式填入它,因此您不必為這個活動建立新的版面配置檔案。 這會在 Hello, Android 多重畫面深度剖析中更詳細地說明。
新增清單
此應用程式會收集電話號碼 (使用者已在第一個畫面中翻譯),然後將它們傳送至第二個畫面。 電話號碼會儲存為字串清單。 若要支援清單 (及稍後使用的意圖),請將下列 using
指示詞新增至 MainActivity.cs 的頂端:
using System.Collections.Generic;
using Android.Content;
接下來,建立可以填入電話號碼的空白清單。 MainActivity
類別會顯示如下:
[Activity(Label = "Phoneword", MainLauncher = true)]
public class MainActivity : Activity
{
static readonly List<string> phoneNumbers = new List<string>();
...// OnCreate, etc.
}
在 MainActivity
類別中,新增下列程式碼以註冊 [Translation History] (翻譯記錄) 按鈕 (將此行放在 TranslationHistoryButton
宣告之後):
Button translationHistoryButton = FindViewById<Button> (Resource.Id.TranslationHistoryButton);
將下列程式碼新增至 OnCreate
方法的結尾,以連接 [Translation History] (翻譯記錄) 按鈕:
translationHistoryButton.Click += (sender, e) =>
{
var intent = new Intent(this, typeof(TranslationHistoryActivity));
intent.PutStringArrayListExtra("phone_numbers", phoneNumbers);
StartActivity(intent);
};
更新 [翻譯] 按鈕,將電話號碼新增至 phoneNumbers
清單。 TranslateHistoryButton
的 Click
處理常式應類似於下列程式碼:
translateButton.Click += (sender, e) =>
{
// Translate user's alphanumeric phone number to numeric
translatedNumber = Core.PhonewordTranslator.ToNumber(phoneNumberText.Text);
if (string.IsNullOrWhiteSpace(translatedNumber))
{
translatedPhoneWord.Text = "";
}
else
{
translatedPhoneWord.Text = translatedNumber;
phoneNumbers.Add(translatedNumber);
translationHistoryButton.Enabled = true;
}
};
執行應用程式
將應用程式部署到模擬器或裝置。 下列螢幕擷取畫面說明執行中的 Phoneword 應用程式:
恭喜您完成第一個多重畫面的 Xamarin.Android 應用程式! 現在是時候剖析您剛學到的工具和技能了 – 接下來是 Hello,Android Multiscreen 深入探討。