次の方法で共有


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

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

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

例のアプリのスクリーンショット

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

要件

このガイドは Hello, Android の続きのため、Hello, Android クイック スタートを完了する必要があります。

チュートリアル

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

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

ヒント

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

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

レイアウトの更新

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

新しいボタンをドラッグ

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

変換履歴ボタンのテキストを設定する

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

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>

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

新しい文字列値が反映されたボタン

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

変換履歴ボタンを無効にする

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

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

新しいファイルを追加する

[新しい項目の追加] ダイアログで、[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 アプリケーションを示しています。

例のスクリーンショット

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

ヒント

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

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

レイアウトの更新

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

新しいボタンをドラッグ

ボタンの [テキスト] プロパティを @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>

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

新しい文字列値が反映されたボタン

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

変換履歴ボタンを無効にする

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

2 番目の画面の電源を投入する 2 番目のアクティビティを作成します。 Solution Pad で、Phoneword プロジェクトの横の灰色の歯車アイコンをクリックして、[追加]、[新しいファイル...] の順に選択します。

[新しいファイル] ダイアログで、[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 アプリケーションを示しています。

例のスクリーンショット

おつかれさまでした。これで最初のマルチスクリーン Xamarin.Android アプリケーションが完成しました。 それでは、学習したツールとスキルを詳しく分析しましょう。次は「Hello, Android マルチスクリーンの詳細」です。