Hello, Android マルチスクリーン: クイック スタート

この 2 部構成のガイドでは、Phoneword アプリケーションを拡張して 2 番目の画面を処理します。 その過程で、基本的な Android アプリケーションの構成要素と Android アーキテクチャの詳細を紹介します。

このガイドのチュートリアル部分では、Phoneword アプリケーションに 2 つ目の画面を追加して、アプリを使用して変換した番号の履歴を追跡し続けます。 最終的なアプリケーションには、右のスクリーンショットのように、"変換された" 番号を表示する 2 つ目の画面が表示されます。

Example app screenshots

付随する深い分析では、ビルドされたものを確認し、アーキテクチャ、ナビゲーション、およびその過程で発生したその他の新しい Android 概念について説明します。

要件

このガイドは Hello, Android の続きのため、Hello, Android クイック スタートを完了する必要があります。 以下のチュートリアルに直接ジャンプしたい場合は、(Hello, Android クイック スタートから) Phoneword の完全版をダウンロードして、それを使用してチュートリアルを開始できます。

チュートリアル

このチュートリアルでは、Phoneword アプリケーションに変換履歴画面を追加します。

まず、Visual Studio で Phoneword アプリケーションを開き、ソリューション エクスプローラーMain.axml ファイルを編集します。

ヒント

新しいリリースの Visual Studio では、Android Designer 内で .xml ファイルを開くことができます。

Android Designer では、.axml ファイルと .xml ファイルの両方がサポートされています。

レイアウトの更新

[ボタン][ツールボックス] からデザイン サーフェスにドラッグし、[TranslatedPhoneWord] TextView の下に配置します。 [プロパティ] ウィンドウで、ボタン ID@+id/TranslationHistoryButton に変更します。

Drag a new button

ボタンの [テキスト] プロパティを @string/translationHistory に設定します。 Android Designer はこれを文字どおりに解釈しますが、ボタンのテキストが正しく表示されるようにいくつかの変更を行います。

Set the translation history button text

ソリューション エクスプローラー[リソース] フォルダーの下のノードを展開し、文字列リソース ファイル Strings.xml をダブルクリックします。

Open 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>

変換履歴ボタンのテキストが、新しい文字列値を反映するように更新される必要があります。

Button reflects new string value

デザイン サーフェスで変換履歴ボタンを選択して、[プロパティ] ウィンドウで enabled 設定を見つけ、その値を false に設定してボタンを無効にします。 これによりデザイン サーフェイス上でボタンが暗くなります。

Disable translation history button

2 つ目のアクティビティの作成

2 番目の画面の電源を投入する 2 番目のアクティビティを作成します。 ソリューション エクスプローラーで、電話word プロジェクトを右クリックし、[新しい項目の追加>]を選択します。..:

Add a new file

[新しい項目の追加] ダイアログで、[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 マルチスクリーンの詳細」で詳しく説明しています。

リストの追加

このアプリは (最初の画面でユーザーが変換した) 電話番号を収集し、2 番目の画面に渡します。 電話番号は、文字列のリストとして格納されます。 一覧 (と後に使用される意図) をサポートするには、次の 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 クラスで、次のコードを追加して変換履歴ボタンを登録します (translateButton 宣言の後にこの行を配置します)。

Button translationHistoryButton = FindViewById<Button> (Resource.Id.TranslationHistoryButton);

OnCreate メソッドの末尾に次のコードを追加して、変換履歴ボタンを接続します。

translationHistoryButton.Click += (sender, e) =>
{
    var intent = new Intent(this, typeof(TranslationHistoryActivity));
    intent.PutStringArrayListExtra("phone_numbers", phoneNumbers);
    StartActivity(intent);
};

phoneNumbers の一覧に電話番号を追加するように、[変換] ボタンを更新します。 translateButtonClick ハンドラーは次のコードのようになります。

// 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 アプリケーションを示しています。

Example screenshots

まず、Visual Studio for Mac で Phoneword プロジェクトを開き、Solution PadMain.axml ファイルを編集します。

ヒント

新しいリリースの Visual Studio では、Android Designer 内で .xml ファイルを開くことができます。

Android Designer では、.axml ファイルと .xml ファイルの両方がサポートされています。

レイアウトの更新

[ボタン][ツールボックス] からデザイン サーフェスにドラッグし、[TranslatedPhoneWord] TextView の下に配置します。 Properties Pad で、ボタン ID@+id/TranslationHistoryButton に変更します。

Drag a new button

ボタンの [テキスト] プロパティを @string/translationHistory に設定します。 Android Designer はこれを文字どおりに解釈しますが、ボタンのテキストが正しく表示されるようにいくつかの変更を行います。

Set the translation history button text

Solution Pad[リソース] フォルダーの下のノードを展開し、文字列リソース ファイル Strings.xml をダブルクリックします。

Open Strings

translationHistory 文字列の名前と値を Strings.xml ファイルに追加して保存します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="translationHistory">Translation History</string>
    <string name="ApplicationName">Phoneword</string>
</resources>

変換履歴ボタンのテキストが、新しい文字列値を反映するように更新される必要があります。

Button reflects new string value

デザイン サーフェスで変換履歴ボタンを選択して、Properties Pad[動作] タブを開き、[有効] チェック ボックスをダブルクリックして、ボタンを無効にします。 これによりデザイン サーフェイス上でボタンが暗くなります。

Disable translation history button

2 つ目のアクティビティの作成

2 番目の画面の電源を投入する 2 番目のアクティビティを作成します。 ソリューション パッドで、電話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 マルチスクリーンの詳細」で詳しく説明しています。

リストの追加

このアプリは (最初の画面でユーザーが変換した) 電話番号を収集し、2 番目の画面に渡します。 電話番号は、文字列のリストとして格納されます。 一覧 (と後に使用される意図) をサポートするには、次の 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 クラスで、次のコードを追加して変換履歴ボタンを登録します (TranslationHistoryButton 宣言の後にこの行を配置します)。

Button translationHistoryButton = FindViewById<Button> (Resource.Id.TranslationHistoryButton);

OnCreate メソッドの末尾に次のコードを追加して、変換履歴ボタンを接続します。

translationHistoryButton.Click += (sender, e) =>
{
    var intent = new Intent(this, typeof(TranslationHistoryActivity));
    intent.PutStringArrayListExtra("phone_numbers", phoneNumbers);
    StartActivity(intent);
};

phoneNumbers の一覧に電話番号を追加するように、[変換] ボタンを更新します。 TranslateHistoryButtonClick ハンドラーは次のコードのようになります。

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 アプリケーションを示しています。

Example screenshots

おつかれさまでした。これで最初のマルチスクリーン Xamarin.Android アプリケーションが完成しました。 次に、学習したツールとスキルを解剖します。次に 、Hello、Android Multiscreen Deep Dive があります。