Лаборторная работа № 2
Знакомство с Android (несколько экранов)
В этом руководстве из двух частей описано, как расширить возможности приложения Phoneword для работы со вторым экраном. Также здесь рассмотрены основные стандартные блоки приложения Android и приведен анализ архитектуры Android.
В пошаговых инструкциях вы добавите второй экран в приложение Phoneword, чтобы отслеживать журнал номеров, преобразуемых этим приложением. Итоговое приложение будет иметь второй экран, где отображаются преобразованные номера, как показано на снимке экрана справа:
Прилагаемый подробный обзор описывает полученный результат, а также затрагивает архитектуру, навигацию и другие новые понятия Android, которые вам встретились.
Пошаговое руководство
В этом пошаговом руководстве вы добавите в приложение Phoneword экран Translation History (Журнал преобразований).
Сначала откройте приложение Phoneword в Visual Studio и измените файл Main.axml из обозревателя решений.
Совет
Новые выпуски Visual Studio поддерживают открытие XML-файлов в Android Designer.
Android Designer поддерживает как файлы AXML, так и XML.
Обновление макета
На панели элементов перетащите элемент Button в область конструктора и расположите его под элементом TextView TranslatedPhoneWord. В области Свойства замените ИД кнопки на @+id/TranslationHistoryButton.
Задайте для свойства Текст кнопки значение @string/translationHistory. Android Designer интерпретирует это буквально, но вы внесете некоторые изменения, чтобы текст кнопки отображался правильно:
Разверните узел Значения в папке Ресурсы в обозревателе решений и дважды щелкните файл строковых ресурсов Strings.xml:
Добавьте значение и имя строки translationHistory в Strings.xml, а затем сохраните файл:
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, чтобы отключить кнопку. При этом кнопка в области конструктора темнеет:
Создание второго действия
Создайте вторую операцию для обработки второго экрана. В обозревателе решений щелкните правой кнопкой мыши проект Phoneword и выберите Добавить > Новый элемент...:
В диалоговом окне Добавление нового элемента выберите Visual C# > Действия и назовите файл действий TranslationHistoryActivity.cs.
Замените код шаблона в файле TranslationHistoryActivity.cs следующим кодом:
C#Копировать
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 и программно заполняете его, поэтому не нужно создавать файл макета для этого действия.
Добавление списка
Это приложение собирает телефонные номера (которые пользователь преобразовал на первом экране) и передает их на второй экран. Эти номера хранятся в виде списка строк. Для поддержки списков (и целей, которые используются позднее) добавьте следующие директивы using в начало файла MainActivity.cs:
C#Копировать
using System.Collections.Generic;
using Android.Content;
Создайте пустой список, который можно заполнить телефонными номерами. Класс MainActivity будет выглядеть следующим образом:
C#Копировать
[Activity(Label = "Phoneword", MainLauncher = true)]
public class MainActivity: Activity
{
static readonly List<string> phoneNumbers = new List<string>();
...// OnCreate, etc.
}
В классе MainActivity добавьте следующий код, чтобы зарегистрировать кнопку Translation History (Журнал преобразований) (поместите эту строку сразу после объявления translateButton):
C#Копировать
Button translationHistoryButton = FindViewById<Button> (Resource.Id.TranslationHistoryButton);
Добавьте в конец метода OnCreate следующий код, чтобы подключить кнопку Translation History (Журнал преобразований):
C#Копировать
translationHistoryButton.Click += (sender, e) =>
{
var intent = new Intent(this, typeof(TranslationHistoryActivity));
intent.PutStringArrayListExtra("phone_numbers", phoneNumbers);
StartActivity(intent);
};
Измените кнопку Translate (Преобразовать), чтобы добавить телефонный номер в список phoneNumbers. Обработчик Click для translateButton должен иметь вид, аналогичный следующему коду:
C#Копировать
// 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:
Поздравляем! Вы создали свое первое приложение Xamarin.Android с несколькими экранами!