Создание приложения для Android в Visual Studio

Обновлено: 20.11.2024

1

Спасибо, что поделились своим восхищением и опасениями по поводу технологии, Джеймс. Мы обязательно рассмотрим их, когда решим обновить историю в будущем. А пока ознакомьтесь с нашим сравнением производительности Xamarin и нативных приложений. Мы будем рады узнать ваше мнение.

0

Мы искали профессиональное обучение в классе по текущим стандартам Xamarin (оболочке и т. д.). Единственные учебные ресурсы, которые мы нашли, — это однодневное практическое занятие на vslive и онлайн-документация. Где найти хорошее обучение? Спасибо!

0

Здравствуйте, Даррен!
Познакомьтесь с модулями и схемами обучения Xamarin от Microsoft Learn, онлайн-курсами от Udemy или курсами LinkedIn Learning, такими как Xamarin.Forms Essential Training.

1

Каждый раз, когда организации начинают новый мобильный проект, необходимо учитывать ряд факторов, поэтому решение о том, использовать ли Swift или Objective-C для разработки, не всегда является однозначным. Приложение iOS для бизнеса всегда выгодно.

0

0

Спасибо, что заметил это, Джейкоб! Действительно, он должен был быть «асинхронным».

0

Здравствуйте, в вашей статье изложены полезные идеи о разработке мобильных приложений Xamarin!

0

0

0

Спасибо, что поделились! Некоторое время назад мы провели исследование, в котором сравнивали производительность Xamarin и нативной системы. Дайте нам знать, что вы об этом думаете!

0

0

Да, время сборки просто ад. Я использую проект UWP для тестирования и удаленных URL-адресов для ресурсов. Это намного быстрее, чем нативная сборка. Хотя, если большая часть кода является общей. В других случаях вы можете отделить проект Android/iOS от основного проекта и работать с ним отдельно.

0

Сравнение xamarin с нативным для разработки приложения, лучшим будет xamarin.

0

«Облако в сочетании с инструментом Xamarin Test Recorder позволяет запускать автоматические тесты пользовательского интерфейса и выявлять проблемы с производительностью до выпуска. Однако эта услуга предоставляется за дополнительную плату». Это уже не так. Test Recorder и Cloud устарели. Нет замены для регистратора тестов. А AppCenter заменяет Xam Test Cloud.

0

Просто убрал это в тексте. Спасибо, что подняли этот вопрос, Марк!

0

Во-первых, большинство успешных приложений бесплатны и поддерживаются рекламой, а это означает, что вы зарабатываете всего несколько центов на пользователя. Даже если вы получите миллион загрузок, вы все равно не заработаете огромную сумму денег, которую можно было бы разделить между всеми люди, которые работали над приложением, плюс оплата любых серверов, которые вам нужны для поддержки приложения. Во-вторых, лояльность к разработчикам приложений очень низкая по сравнению с традиционными настольными приложениями.

0

Это наша вина как разработчиков. Публике все равно, сколько они платят, пока везде так. Каким-то образом нам удалось оказаться на дне бочки.

0

Потрясающая статья с глубоким анализом, веская причина для сравнения Xamarine, Native и Hybrid.

0

Спасибо, Абхишек! Если вы хотите узнать больше о практических различиях, взгляните на наше более глубокое исследование производительности Xamarin и Native.

0

0

Хорошо описал плюсы и минусы разработки приложений с помощью Xamarin. Спасибо, что поделились замечательным анализом.

хочу поделиться с вами еще одной статьей о Xamarin

0

Вы можете удалить пункт "Дорогая лицензия Xamarin", так как теперь он предоставляется бесплатно и в версиях для сообщества.

0

Для мобильной разработки xamarin является ключевым и широко используется в наши дни. Так что для нас плюсы очень эффективны и очень хорошо описаны здесь.

0

Если ваше мобильное приложение было разработано с помощью Microsoft Xamarin, вам необходимо знать, что работает в ваших интересах. В этой статье освещаются преимущества и недостатки Microsoft Xamarin.

0

"Однако, если вы ищете альтернативу Xamarin для создания кроссплатформенного мобильного приложения, вы можете быть разочарованы. Хотя наиболее широко используемыми кроссплатформенными инструментами для разработки мобильных приложений являются PhoneGap/Apache Cordova, Ionic Framework, Appcelerator/Titanium, они в основном опираются на веб-технологии, такие как HTM5 или JavaScript».

Как насчет нативной реакции? Можете ли вы поделиться некоторыми мнениями?

0

Центр приложений Visual Studio

Непрерывное выполнение всего — сборка, тестирование, развертывание, вовлечение, повторение

Автоматизируйте жизненный цикл приложений для iOS, Android, Windows и macOS. Подключите репозиторий и за считанные минуты создайте его в облаке, протестируйте на тысячах реальных устройств, распространите среди бета-тестеров и магазинов приложений и отслеживайте реальное использование с помощью данных о сбоях и аналитики. Все в одном месте.

Служба приложений Azure

Мобильная серверная часть как услуга

Мобильные приложения Azure App Service — это платформа как услуга (PaaS), предлагающая широкий набор возможностей для мобильных приложений. Вы можете включить любую из его частей, чтобы ускорить разработку мобильного приложения. Добавьте хранилище данных в облаке, корпоративную или социальную аутентификацию, push-уведомления или автономную синхронизацию, масштабируясь до миллионов устройств.

Нативные приложения с C++

Кроссплатформенная нативная разработка

Обменивайтесь, повторно используйте, создавайте, развертывайте и отлаживайте кроссплатформенный код C++ для мобильных устройств. Создавайте проекты на основе шаблонов для приложений Android Native-Activity или создавайте высокопроизводительные общие библиотеки для включения в другие решения. Вы также можете перенести свой существующий код C++ на мобильные платформы с минимальными усилиями. Используйте IntelliSense для конкретной платформы, проверяйте код без сборки по мере ввода, устанавливайте точки останова, отслеживайте переменные и развертывайте приложение как на устройствах (ARM, x86), так и на эмуляторах.

Игры с Unity

Разработка кроссплатформенных игр с помощью Unity и Visual Studio

Создавайте свои 2D- и 3D-игры с помощью непревзойденного движка Unity в Visual Studio — создайте один раз и ориентируйтесь на более чем 17 платформ, включая все мобильные платформы. Выполняйте отладку Unity из Visual Studio с помощью отладчика Visual Studio мирового класса, чтобы устанавливать точки останова и оценивать переменные и сложные выражения, а также использовать все замечательные функции, которые Visual Studio может предложить для повышения вашей производительности.

Эмулятор для Android

Быстрое многофункциональное моделирование на основе Hyper-V

Развертывайте кроссплатформенные приложения на устройствах Android с различными конфигурациями из Visual Studio. Он работает с вашими проектами Xamarin, Cordova или кроссплатформенными проектами C++. Эмулятор Visual Studio для Android можно установить в разделе «Отдельные компоненты» с Visual Studio 2022.

Операционная система Android основана на виртуальной машине Dalvik (ВМ), оптимизированной для мобильных устройств, аналогичной виртуальной машине Java. Oxygene для Java поставляется с шаблонами для создания проектов Android и создает как собственные файлы Java JAR, так и файлы Android APK, необходимые для развертывания на устройстве Android.

Предварительные требования и эмуляторы

Чтобы начать разработку для Android, вам необходимо установить Java Development Kit и Android SDK, как описано здесь (Fire) и здесь (Visual Studio).

Когда все инструменты и платформы будут установлены, вы сможете создать эмулятор Android, также известный как виртуальное устройство Android или AVD. Это можно сделать с помощью диспетчера виртуальных устройств Android, доступ к которому можно получить из диспетчера SDK, выбрав «Инструменты» > «Управление AVD».

Просто нажмите «Создать», дайте имя эмулятору и выберите API в поле «Цель». Вы можете выбрать любой установленный уровень API, например Android 2.2 — уровень API 8 (также известный как Froyo) или Android 4.0.3 — уровень API 15 (также известный как Ice Cream Sandwich). После того как вы указали размер SD-карты для эмулятора (например, 512) и выбрали скин (разрешение экрана), вы можете использовать кнопку «Создать AVD», чтобы завершить работу.

Вы можете запустить эмулятор с этого экрана, выбрав его и нажав кнопку "Пуск".

Примечание. Когда вы повторно запускаете SDK Manager, он часто находит обновления для установки. Как упоминалось ранее, если Android SDK был установлен в папку по умолчанию, для его установки потребуются права администратора. Поэтому обязательно запускайте его от имени администратора (или установите Android SDK в другое место, чтобы упростить задачу).

Когда вы впервые создаете или открываете проект Elements для Android, он выполнит «предварительную проверку», чтобы убедиться, что он может найти то, что ему нужно, в частности JDK и Android SDK. Если вы установили их в настраиваемые папки и программа не может их найти, это дает вам возможность указать папки для установки.

Начало работы

И в Visual Studio, и в Fire диалоговое окно «Новый проект» предоставляет шаблон приложения Android в Oxygene для Java и Android.

Новый проект Android создается с помощью одного простого действия под названием MainActivity . Действие – это основная часть приложения для Android – отдельная целенаправленная операция, которую может выполнять пользователь. Предварительно созданный объект MainActivity содержит небольшой объем кода для настройки простого пользовательского интерфейса с кнопкой, при нажатии на которую в заголовке отображается увеличивающийся счетчик.

Визуальное представление экрана для MainActivity определяется в файле XML main.layout-xml, который находится в папке res/layout.

Элементы управления именуются с помощью атрибута android:id в макете XML. Вы добавляете префикс @+id/ перед выбранным именем, а затем можете ссылаться на идентификатор элемента управления в коде, добавляя к нему префикс R.id. (все идентификаторы становятся членами класс id, вложенный в класс ресурсов R). Чтобы получить доступ к элементу управления, вы можете передать идентификатор в метод действия findViewById(). Например, кнопка, названная в приведенном выше XML-коде макета, имеет идентификатор, доступный в коде как R.id.MyButton. Чтобы получить доступ к объекту кнопки, вы должны использовать Button(findViewById(R.id.MyButton)) — обратите внимание на приведение типов для получения объекта Button, что необходимо, поскольку findViewById()< /tt> возвращает объект View, один из предков класса Button.

Строки, указанные в XML-атрибутах с префиксом @string/ или в коде как члены класса R.string, определяются в ''strings.android -xml", который можно найти в папке "res/values".

Чтобы сослаться на строковый ресурс в коде из метода действия, просто вызовите getString(R.string.my_button_text). getString() — это метод класса Activity (или, точнее, метод одного из классов-предков Activity, Context). Как видите, вы передаете строковый идентификатор ресурса методу, и он возвращает результирующую соответствующую строку.

onCreate – это метод, который вызывается при первом создании действия и в ходе его инициализации. После вызова унаследованного метода вы можете увидеть, что идентификатор ресурса макета назначен свойству ContentView, хотя, учитывая примечание выше, должно быть ясно, что на самом деле мы передаем идентификатор ресурса в установитьКонтентВью(). Это устанавливает файл макета ''res.layout-xml'' в качестве пользовательского интерфейса для этого основного действия.

Далее код находит кнопку с идентификатором MyButton и сохраняет ссылку на нее в локальной переменной.

Последняя задача onCreate() заключается в настройке обработчика события нажатия кнопки, что выполняется путем присвоения выражения свойству кнопки OnClickListener, или, на самом деле, передавая его методу setOnClickListener(). Поскольку Java использует интерфейсы для определения сигнатур событий, мы используем встроенную реализацию интерфейса Oxygene, чтобы связать наш метод ButtonOnClick с методом onClick интерфейса события View.OnClickListener кнопки.

Сам метод обработчика событий, ButtonOnClick, увеличивает переменную экземпляра класса Count, а затем использует это значение для создания форматированной строки, которая затем устанавливается в качестве заголовка кнопки. через его свойство Text (или метод setText()). Форматирование строки использует значение строкового ресурса my_button_text_2 (показанного ранее), который использует синтаксис строки формата Android. Вызываемый метод форматирования на самом деле String.format(). Он вызывается как WideString.format(), чтобы избежать двусмысленности со свойством String (метод getString()) класса Activity, который мы рассмотрели. чуть выше. WideString предоставляется Oxygene как синоним типа String.

Одним действительно важным значением в файле strings.android-xml является строка app_name. Это используется приложением дважды:

  • в строке заголовка действия есть эта строка, и
  • в списке установленных приложений на устройстве эта строка используется для идентификации приложения.

Обязательно обновите app_name, чтобы сделать его значимым.

В манифесте этого примера приложения вы можете видеть, что приложению присвоена текстовая метка и значок, а отдельное действие идентифицировано по имени класса, а также имеет метку. Запутанное объявление фильтра намерений внутри этого действия — это просто стандартный код, необходимый для того, чтобы сообщить Android, что это действие является основным действием приложения.

Если вам нужно добавить в проект больше строк, просто отредактируйте файл ''strings.android-xml''.

'''Примечание'''. Различные файлы ресурсов Android, находящиеся в иерархии папок ''res'', представляют собой XML-файлы. Все они были бы совершенно правильными и пригодными для использования, если бы им было предоставлено стандартное расширение .xml. Расширения .layout-xml и .android-xml используются для включения соответствующего поведения IntelliSense (или завершения кода) при работе с этими файлами.

Запуск вашего приложения

При создании приложения компилятор Oxygene сначала создает обычный файл Java JAR, а затем набор инструментов Android создает файл Android APK (Android PacKage). Файл JAR — это просто скомпилированный код (байтовый код Java), а файл APK — это байтовый код Java, обработанный для запуска на виртуальной машине Android Dalvik со всеми необходимыми ресурсами, упакованными в файл. После создания пакета его можно запускать либо на AVD (другими словами, на эмуляторе), либо на физическом устройстве.

'''Примечание'''. Чтобы развернуть APK-файл с компьютера с Windows на физическое устройство, такое как телефон или планшет, необходимо сначала установить USB-драйвер производителя для устройства, чтобы обеспечить связь между ПК и Устройство. Затем вы подключаете устройство к ПК с помощью соответствующего USB-кабеля. Вы сможете найти инструкции по установке драйвера на веб-сайте производителя или с помощью поисковой системы.

Отладчик Oxygene автоматически развернет APK-файл на эмуляторе и запустит его, когда вы нажмете кнопку "Начать отладку" или "Начать без отладки" в Visual Studio (или нажмете F5 или Ctrl+F5). соответственно). Если вы нажмете «Начать отладку» (или F5), вы сможете установить точки останова и отлаживать свое приложение из Visual Studio по мере его выполнения на эмуляторе или физическом устройстве.

Если у вас есть работающее виртуальное устройство Android, а также физическое устройство Android, подключенное к компьютеру, вам нужен какой-то способ сообщить Oxygene, какое устройство будет использоваться при запуске приложения. Выбрать Android-устройство можно в разделе Android свойств проекта.

Просто запустите adb с параметром install и именем загружаемого APK. Если APK уже установлен, необходимо также указать -r. Предполагая, что каталог adb был добавлен к пути поиска, вы должны использовать:

adb install -r org.me.androidapplication1.apk

'''Примечание'''. Если у вас запущен эмулятор и к ПК подключено физическое устройство, вы можете использовать переключатели -d и -e чтобы указать либо устройство, либо эмулятор соответственно, например:

adb -e install -r org.me.androidapplication1.apk

После установки APK вы можете запустить его так же, как и любое другое приложение.

Элементы пользовательского интерфейса

Тег в ''main.layout-xml'' является одним из нескольких вариантов макета. Некоторые другие макеты — это FrameLayout, TableLayout и RelativeLayout.

    - Макет кадра предназначен для выделения области на экране для отображения одного элемента. - Макет, который упорядочивает дочерние элементы в один столбец (по вертикали) или в одну строку (по горизонтали). Ориентация по умолчанию — горизонтальная. - Макет, в котором позиции детей могут быть описаны по отношению друг к другу или к родителю. - Макет, который упорядочивает своих дочерних элементов в строки и столбцы. TableLayout состоит из нескольких объектов TableRow, каждый из которых определяет строку. Контейнеры TableLayout не отображают линии границ для своих строк, столбцов или ячеек. Каждая строка содержит ноль или более ячеек; каждая ячейка может содержать один объект View. В таблице столько столбцов, сколько строк с наибольшим количеством ячеек. Таблица может оставлять ячейки пустыми. Ячейки могут охватывать столбцы, как и в HTML.

После создания макета вы можете добавить другие элементы управления, такие как Button, ImageButton, TextView, ImageView и другие.

Есть неплохой учебник по пользовательскому интерфейсу. Имейте в виду, что примеры кода будут на Java, а не на Oxygene. Однако вы должны обнаружить, что функция Oxidizer IDE может помочь в переносе кода Java на синтаксис Oxygene.Если у вас есть фрагмент кода Java в буфере обмена, вы можете нажать Alt+Ctrl+V, затем J, и Oxidizer сделает все возможное, чтобы перевести код для вас. . Он не обязательно будет идеально работать, поскольку работает без контекста, но он должен сделать основную часть перевода за вас.

Теперь тосты

Если вы хотите вывести сообщение для своих пользователей из приложения Android, вы произносите тост. Тост — это небольшое всплывающее окно, которое на короткое время появляется перед текущей активностью. Просто вызовите метод makeText в классе Toast, чтобы создать объект всплывающего уведомления, а затем вызовите функцию show(), чтобы вывести его на экран. Существует две версии makeText, каждая из которых принимает 3 параметра. Вот пример вызова:

Первый параметр — это контекст, к которому относится всплывающее уведомление. Вы можете либо передать свою активность (используя self, если работаете в методе активности), либо ссылку на единственный объект приложения, существующий в приложении (доступный через метод активности getApplicationContext()), так как оба Activity и Application наследуются от класса Context.

Второй параметр — это отображаемая текстовая строка. Это может быть буквальная строка, как указано выше, или, что предпочтительнее, строковый идентификатор ресурса, в зависимости от того, какую версию makeText вы используете. Таким образом, чтобы передать идентификатор ресурса, вы должны сослаться на строку, определенную в ''strings.android-xml'', используя String[R.string.some_identifier].

Последний параметр — это продолжительность автоматического закрытия всплывающего уведомления: Toast.LENGTH_SHORT или Toast.LENGTH_LONG.

Вызов makeText возвращает объект Toast. Существуют и другие методы для настройки объекта Toast. В конечном итоге метод show отображает всплывающее уведомление.

Просто добавьте приведенный выше код в обработчик событий ButtonOnClick в MainActivity, и когда вы запустите его в эмуляторе или на устройстве, вы увидите всплывающее уведомление, когда вы нажмите кнопку.

Всплывающее уведомление никогда не получает фокус и всегда исчезает по истечении времени ожидания.

Документация

Для документации Android вы можете использовать массу информации, предоставленной Google в их Справочнике по API и Руководствах по API. Естественно, эта документация предназначена для Java-программистов, но на самом деле это должно быть лишь небольшим неудобством — сигнатуры методов представлены в синтаксисе в стиле C, а не в стиле Pascal. Oxygene может напрямую обращаться к любому классу Android SDK и вызывать любые доступные методы, поэтому лучшей документацией является документация, написанная поставщиком платформы: Google.

В этом учебнике различные типы и методы классов были связаны с соответствующей документацией Android SDK. Вам следует ознакомиться с документацией Android SDK, чтобы узнать, как программировать приложения Android в Oxygene для Java.

Примечания

Одна важная вещь, которую следует помнить для Android, когда вы начинаете создавать более крупные проекты и использовать дополнительные библиотеки, заключается в том, что если вы не установите для свойства «Копировать локально» значение true для библиотеки, на которую указывает ссылка, компилятор предполагает, что библиотека доступна. в системе и не включает его в сгенерированный архив. Если вы установите его, он станет частью приложения. Для основной библиотеки платформы, такой как android-14, для параметра «Копировать локально» необходимо оставить значение false, но для всех остальных библиотек необходимо установить значение true, чтобы код, на который указывает ссылка, был доступен при запуске приложения на устройстве Android.

Давайте сначала заложим основу, ответив на часто задаваемые вопросы.

XAML — это еще один «язык», который будет использоваться для создания пользовательского интерфейса с помощью Xamarin. XAML уже давно используется для создания приложений Windows с помощью WPF и UWP и обладает некоторыми замечательными функциями, включая удобную для чтения разметку, технологию горячей перезагрузки и расширенную привязку данных, упрощающую разработку пользовательского интерфейса.

Итак, давайте начнем создавать наши первые мобильные приложения с помощью Xamarin!

Установка Visual Studio для разработки мобильных приложений

Первым шагом на пути к кроссплатформенности является установка Visual Studio 2019 для Windows или Visual Studio 2019 для Mac.

В Visual Studio 2019 для Mac можно выбрать установку Android и iOS.

Если вы занимаетесь разработкой для iOS, вам также потребуется установить Xcode на свой компьютер с macOS.

После этого все готово для мобильной разработки!

Когда вы создаете и запускаете проект Android, вам может быть предложено установить дополнительные Android SDK и создать эмуляторы Android.

Создание проекта

Теперь, когда у нас установлены Visual Studio 2019 и Xamarin, давайте приступим к работе! При запуске Visual Studio 2019 у вас будет возможность создать новый проект. В Windows вы можете выполнить поиск Xamarin.Forms или использовать фильтр типов проектов и выбрать Mobile. Нам нужно выбрать мобильное приложение (Xamarin.Forms).

Когда вы выберете этот новый проект, вы увидите новое диалоговое окно с вопросом, какой тип шаблона для приложения вы хотели бы использовать:

У нас есть несколько вариантов выбора в зависимости от типа приложения, которое мы хотим создать.

Всплывающие, с вкладками и пустые

Шаблоны всплывающих окон и вкладок основаны на новейшей технологии Xamarin.Forms под названием Shell. Он позволяет быстрее создавать шаблоны приложений и предлагает уникальные функции, такие как навигация на основе URL. Эти шаблоны похожи с основным отличием, если вам нужно всплывающее меню или нижние вкладки для основы вашего приложения.

Пустое приложение — это именно то, что предлагает довольно простой шаблон с одной страницей и ничего больше.

Начнем с Flyout! Я хочу, чтобы мы начали здесь, так как большинство руководств не проходят через Shell, и для меня это будущее разработки приложений Xamarin. В этом шаблоне много всего, поэтому в будущих постах мы рассмотрим каждый раздел, а сегодня мы просто создадим проект и рассмотрим, что такое оболочка.

Если вы используете Visual Studio 2019 для Mac, выберите Мультиплатформа > Приложение > Приложение Flyout Forms

Что в проекте?

Теперь, когда проект приложения создан, вы увидите несколько проектов внутри одного решения.

Давайте рассмотрим, что есть в нашем новом решении:

Проекты iOS и Android – это "головной" или "родительский" проект, который используется для размещения кода, настроек, ресурсов и многого другого для конкретной платформы. Здесь вы захотите настроить различные параметры, такие как отображаемое имя, значок приложения, номера версий и любой код, необходимый для конкретных вещей iOS или Android, которые недоступны для разных платформ. В какой-то момент вам нужно будет зайти в этот проект и внести некоторые изменения, но пока мы останемся в кросс-платформенном проекте.

Кроссплатформенный пользовательский интерфейс Xamarin.Forms

  • Модели. Это классы, которые представляют данные в ваших приложениях, таких как Person, Car, Dog, Cat и т. д. В этом приложении у нас есть одна модель с именем Item.
  • Службы: внутри этой папки вы можете поместить код, который обращается к вещам, не связанным с пользовательским интерфейсом, таким как вызовы веб-служб, базы данных и т. д. В проекте в простом хранилище MockDataStore, которое используется для хранения элементов в памяти.
  • Представления: здесь будут жить наши файлы пользовательского интерфейса XAML!
  • ViewModels: в этой папке вы найдете файлы, которые почти 1:1 сопоставляются с папкой Views. Это связано с тем, что каждое представление имеет ViewModel, связанную с тем, что Xamarin.Forms может соединить их вместе, чтобы представление могло отображать информацию или вызывать методы в каждой ViewModel.

Давайте посмотрим на AboutPage.xaml, первую страницу, которую мы увидим при запуске приложения. Здесь мы видим несколько вещей, во-первых, это элемент верхнего уровня ContentPage:

Вот несколько тегов xmlns, которые представляют, где находится конкретный код. Значение по умолчанию и x включены в каждый файл и предназначены для базовой функциональности. Тег xmlns:vm позволяет нам получить доступ к нашему собственному коду из XAML, что мы вскоре увидим. x:Class — это ссылка на пространство имен и имя страницы, это соответствует коду позади. Наконец, есть свойство Title, данные которого привязаны к свойству Title в нашей ViewModel.

Мы можем установить дополнительные свойства, такие как BindingContext и Resources, с содержимым XAML. Здесь мы собираемся использовать этот тег xmlns:vm, чтобы установить BindingContext в новый экземпляр AboutViewModel:

Далее идет ресурс Color, который можно использовать на странице. Ресурсы позволяют нам удалять повторяющийся код и создавать повторно используемые пары ключ/значение. Это чем-то похоже на CSS в веб-разработке.

Мы можем добавить в Ресурсы дополнительные элементы, включая строки, стили и многое другое.

Наконец, каждая страница может иметь один элемент управления корневым элементом. Обычно это макет, такой как StackLayout, ScrollView или Grid, как здесь. Сетка — это потрясающий элемент управления, в котором есть строки и столбцы. Мы не будем вдаваться в детали макетов, но здесь отображается изображение, некоторый текст и кнопка, по нажатию которой открывается веб-браузер.

Обратите внимание на , который является ссылкой на ресурс, который мы определили в Accent ранее, но основной находится в нашем App.xaml, а это ресурсы, доступные для всего приложения.

Чтобы найти дополнительные макеты и элементы управления, откройте панель инструментов и посмотрите, что доступно:

Наконец, если вы выберете элемент управления или макет, на панели свойств будут показаны все различные свойства, доступные для этого элемента управления.

Очень важно то, что каждая из этих страниц XAML содержит код, который важен для представления XAML, и имеет определенные методы для конструктора и событий, таких как отображение или исчезновение страниц. Вы можете использовать маленькую стрелку раскрывающегося списка, чтобы увидеть код .xaml.cs позади файла.

Если вы откроете его, вы увидите, что это очень просто, так как для этого представления нет никаких специальных событий, которые нужны прямо сейчас.

Взаимодействие с пользователем и ViewModels

Теперь давайте поговорим о ViewModel для этой страницы, созданной в XAML. Откройте файл ViewModels -> AboutViewModel.cs, дважды щелкнув его.

Это удивительно простая ViewModel, но она является ярким примером того, как работает привязка данных. Здесь ViewModel задает для заголовка значение О программе, а затем создает новую команду, которая вызывает Browser.OpenAsync для открытия веб-браузера на странице.

Эта команда особенная. В отличие от Title, который представляет собой простую отображаемую строку, Command — это специальный класс, который мы можем использовать, чтобы указать нашему пользовательскому интерфейсу что-то делать, когда пользователь взаимодействует с ним. Например, на нашей кнопке мы увидели следующий код:

Этот код сообщает Xamarin.Forms, что в нашей ViewModel есть общедоступная команда Command, код которой выполняется, когда пользователь нажимает кнопку. В этом случае мы хотим открыть браузер, который является одной из многих встроенных функций, доступных в Xamarin.Essentials. Вызов Browser.OpenAsync запустит браузер для iOS и Android с помощью одной строки кода.

Быстрые изменения с помощью горячей перезагрузки XAML

Теперь пришло время запустить наше приложение. Мне нравится начинать с Android, потому что эмуляторы доступны локально как для Windows, так и для macOS. В меню Visual Studio вы увидите, что Android является проектом по умолчанию, и будет доступна кнопка отладки, а также будут показаны доступные эмуляторы Android. Когда вы нажимаете кнопку отладки, если у вас нет эмуляторов, вам будет предложено создать их.

Когда приложение запускается, оно переходит в режим отладки, который позволяет нам устанавливать точки останова в нашем коде для просмотра значений, а также включает горячую перезагрузку XAML, где мы можем вносить изменения в пользовательский интерфейс, не останавливая отладку.

Откроем файл AboutPage.xaml и изменим цвет акцента на другой. Здесь я обновлю его до Orange и нажму "Сохранить", чтобы увидеть изменения.

На этом этапе мы можем добавить новые элементы управления, обновить пользовательский интерфейс и продолжить работу над нашим приложением для Android.

Развертывание на iOS с горячим перезапуском

Давайте развернем iOS! Щелкните правой кнопкой мыши проект iOS и выберите «Установить как запускаемый проект»:

В iOS для разработчиков все немного по-другому. Если вы используете macOS и устанавливаете Xcode, вам будут доступны симуляторы iOS. Если это вы, вы можете выбрать симулятор, а затем отладить свое приложение. В Windows нет симуляторов iOS :( поэтому есть два способа получить свой

    : если у вас есть компьютер с macOS, вы можете установить Visual Studio 2019 для Mac и Xcode и подключиться к нему со своего компьютера с Windows, чтобы использовать его в качестве компьютера для удаленной сборки.После этого симулятор iOS можно запустить с экрана вашего компьютера с Windows, что очень здорово! : это новая технология предварительного просмотра, которая позволяет развертывать отладочную сборку вашего приложения непосредственно на устройстве iOS, подключенном к компьютеру с Windows. Это замечательно, если у вас нет Mac и вы хотите отлаживать свое приложение и использовать замечательные функции, такие как горячая перезагрузка XAML.

В зависимости от ваших настроек и доступного оборудования вы можете начать отладку своего приложения iOS из Windows. Прочтите документацию, на которую я ссылаюсь, чтобы получить полное руководство по установке.

Знакомство с приложением и оболочкой

Последнее, о чем я хочу поговорить, это о том, что находится в нашем *приложении и в нашей командной консоли:

В нашем App.xaml вы найдете глобальные ресурсы, такие как основной, который мы использовали ранее для кнопки, а также стили, такие как глобальный стиль кнопки, который мы используем с состояниями, когда они включены и отключены. Если вы откроете код App.xaml.cs, вы увидите создание приложения, которое устанавливает MainPage для нашей AppShell, а также имеет дополнительные события, аналогичные нашей странице, но для приложения, например, когда оно запустилось, перешло в спящий режим. (он же фон) и возобновлено.

AppShell.xaml содержит оболочку структуры нашего приложения. Он включает в себя стили и цвета для оболочки нашего приложения, а также дополнительные элементы для отображаемых вкладок, всплывающих меню и страниц. Здесь мы найдем два элемента FlyoutItem, которые представляют страницы AboutPage и BrowsePage. Кроме того, у него есть MenuItem для отображения кнопки входа/выхода из системы. ShellContent имеет привязку к нашей странице, которую мы создали, и автоматически страницы будут отображаться и переходить к каждой из них при выборе.

Подробнее

Есть чему поучиться, но есть и множество замечательных ресурсов, которые помогут вам создавать приложения с помощью Xamarin. Вот отличный список, который нужно пройти:

Читайте также: