Вы находитесь на странице: 1из 5

2.

Приложение с общим кодом

2.1 Создать общее приложение с именем CommonClass

2.2 Добавить в решение новый проект для iOS


2.3 Добавить в решение новый проект для Android

2.4 Настройка общей части проекта

В качестве общего для обеих платформ модуля будет простой генератор случайного
пароля, принимающий на входе длину пароля и возвращающий пароль из случайной
комбинации символов из заданного словаря:

public class CommonClass


{
     private Random random = new Random();
     const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

     public CommonClass()


     {
     }

     public string GetRandomPassword(int length)


     {
    return new string(Enumerable.Repeat(chars, length)
      .Select(s => s[random.Next(s.Length)]).ToArray());
    }
}

Необходимо добавить данный код  в содержимое CommonClass общего проекта.

2.5 Настройка iOS приложения.

Необходимо добавить кнопку и текстовое поле в окно приложения. По нажатию на кнопку


в текстовом поле будет отображаться новый пароль, сгенерированный классом
CommonClass из общей части решения.
Для этого требуется модифицировать содержимое файла ViewController.cs следующим
образом:

1) Добавить члены класса

     CommonClass _commonCode;


     UIButton _startButton;
     UILabel _mainLabel;

2) Добавить метод создания кнопки

     private void CreateButton()


     {
    float buttonWidth = 200f;
    float buttonHeight = 30f;
    _startButton = new UIButton(new CoreGraphics.CGRect(View.Frame.Width / 2f - buttonWidth / 2f,
View.Frame.Height - buttonHeight * 2f,
buttonWidth, buttonHeight));
    _startButton.TouchUpInside += OnButtonClick;
    _startButton.SetTitle("Get password", UIControlState.Normal);
    _startButton.Layer.BorderColor = UIColor.White.CGColor;
    _startButton.Layer.BorderWidth = 1f;

    View.AddSubview(_startButton);
    }

3) Добавить метод создания текстового поля

     private void CreateLabel()


    {
         float labelHeight = 30f;
         CoreGraphics.CGRect frame = new CoreGraphics.CGRect(0, (View.Frame.Height - labelHeight) /
2f,
View.Frame.Width, labelHeight);
         _mainLabel = new UILabel(frame);
         _mainLabel.Text = "Push button to generate new password";
         _mainLabel.TextAlignment = UITextAlignment.Center;

         View.AddSubview(_mainLabel);
    }

4) Добавить обработчик нажатия на кнопку

     private void OnButtonClick(object sender, EventArgs args)


     {
         _mainLabel.Text = _commonCode.GetRandomPassword(7);
     }

5) В перегруженном методе инициализации окна

public override void ViewDidLoad()

добавить вызов методов создания элементов интерфейса и генератора пароля:

         View.BackgroundColor = UIColor.Gray;


CreateButton();
         CreateLabel();

         _commonCode = new CommonClass();

6) Чтобы приложение iOS “увидело” общий класс CommonClass, в проект, содержащий


приложение iOS, необходимо добавить ссылку на проект, содержащий этот самый класс:
А также необходимо добавить директиву использования пространства имен,
содержащего класс CommonClass (обычно это имя решения):

using <namespace that contains CommonClass>

Поместить using System.Linq;   в файл MyClass.cs

В начале файлов MyClass.cs  и ViewController.cs необходимо переименовать


пространство имен c CommonClass на CommonClass2.
 
2.6 Настройка Android приложения.

Необходимо выполнить действия, схожие с настройкой iOS приложения

1) Добавление текстового поля в окно приложения. Для этого необходимо открыть файл

Resources -> layout -> Main.axml

с помощью редактора макетов и разместить ниже имеющейся кнопки текстовое поле Text
(Medium) из панели инструментов, а затем изменить его идентификатор Id на значение

@+id/myLabel

2) В файле MainActivity в методе

protected override void OnCreate(Bundle savedInstanceState)


код после строки 

SetContentView(Resource.Layout.Main); 

заменить на следующий код:

         CommonClass passGenerator = new CommonClass();

         // Get our button from the layout resource,


         // and attach an event to it
         Button button = FindViewById<Button>(Resource.Id.myButton);
         button.Text = "Generate new password";

         // Get our text view and set start text


         TextView textView = FindViewById<TextView>(Resource.Id.myLabel);
         textView.Text = "Push button to generate new password";

         button.Click += delegate { textView.Text = passGenerator.GetRandomPassword(7); };

3) Выполнить настройку связности проектов аналогично п.6 параграфа 2.5