HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#Руководства</a></p>
1 <p><a>#Руководства</a></p>
2 <ul><li>8 июн 2022</li>
2 <ul><li>8 июн 2022</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Пилить кросс-платформенные апки можно не только на Java, но и на .NET. Знакомимся с Xamarin.Forms.</p>
4 </ul><p>Пилить кросс-платформенные апки можно не только на Java, но и на .NET. Знакомимся с Xamarin.Forms.</p>
5 <p>Иллюстрация: .NET / Xamarin / Colowgee для Skillbox Media</p>
5 <p>Иллюстрация: .NET / Xamarin / Colowgee для Skillbox Media</p>
6 <p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
6 <p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
7 <p>Xamarin - это фреймворк для разработки приложений на языках семейства<a>.NET</a>(<a>C#</a>, F#, Visual Basic). Он позволяет написать единый код, который будет работать на Android, iOS и UWP, или нативные программы для этих платформ.</p>
7 <p>Xamarin - это фреймворк для разработки приложений на языках семейства<a>.NET</a>(<a>C#</a>, F#, Visual Basic). Он позволяет написать единый код, который будет работать на Android, iOS и UWP, или нативные программы для этих платформ.</p>
8 <p>Разберёмся, как создавать приложения на Xamarin.Forms на примере калькулятора для мобильных устройств.</p>
8 <p>Разберёмся, как создавать приложения на Xamarin.Forms на примере калькулятора для мобильных устройств.</p>
9 <p>Сначала скачаем и установим модуль Mobile Development with .NET. Для этого запустите Visual Studio Installer (скачать его можно на <a>официальном сайте</a>), выберите подходящую версию IDE и укажите компонент Mobile Development with .NET.</p>
9 <p>Сначала скачаем и установим модуль Mobile Development with .NET. Для этого запустите Visual Studio Installer (скачать его можно на <a>официальном сайте</a>), выберите подходящую версию IDE и укажите компонент Mobile Development with .NET.</p>
10 <em>Скриншот: Skillbox Media</em><p>Когда Visual Studio установится, нужно создать Xamarin-проект.</p>
10 <em>Скриншот: Skillbox Media</em><p>Когда Visual Studio установится, нужно создать Xamarin-проект.</p>
11 <em>Скриншот: Skillbox Media</em><p>Для этого можно выбрать проект Mobile App (Xamarin.Forms), работающий на всех платформах, либо отдельно Android App или iOS App.</p>
11 <em>Скриншот: Skillbox Media</em><p>Для этого можно выбрать проект Mobile App (Xamarin.Forms), работающий на всех платформах, либо отдельно Android App или iOS App.</p>
12 <p><strong>Важно!</strong></p>
12 <p><strong>Важно!</strong></p>
13 <p>Разработка на Xamarin.Forms и Xamarin различается. В Xamarin.Forms интерфейс создаётся с помощью XAML, а в Xamarin - с помощью нативных средств выбранной платформы.</p>
13 <p>Разработка на Xamarin.Forms и Xamarin различается. В Xamarin.Forms интерфейс создаётся с помощью XAML, а в Xamarin - с помощью нативных средств выбранной платформы.</p>
14 <p>Теперь укажите название и путь, а потом нажмите Create:</p>
14 <p>Теперь укажите название и путь, а потом нажмите Create:</p>
15 <em>Скриншот: Skillbox Media</em><p>Затем нужно выбрать шаблон. В этой статье рассматривается создание мобильного приложения на примере пустого (Blank) проекта. Обратите внимание, что можно выбрать платформы Android, iOS и UWP. Для последнего нужно скачать дополнительный компонент в Visual Studio Installer - Universal Windows Platform development.</p>
15 <em>Скриншот: Skillbox Media</em><p>Затем нужно выбрать шаблон. В этой статье рассматривается создание мобильного приложения на примере пустого (Blank) проекта. Обратите внимание, что можно выбрать платформы Android, iOS и UWP. Для последнего нужно скачать дополнительный компонент в Visual Studio Installer - Universal Windows Platform development.</p>
16 <em>Скриншот: Skillbox Media</em><p>Visual Studio понадобится какое-то время, чтобы подготовить все файлы проекта, а потом стоит сразу установить средства для отладки приложений. Для этого понадобится либо устройство на iOS или Android, либо эмулятор.</p>
16 <em>Скриншот: Skillbox Media</em><p>Visual Studio понадобится какое-то время, чтобы подготовить все файлы проекта, а потом стоит сразу установить средства для отладки приложений. Для этого понадобится либо устройство на iOS или Android, либо эмулятор.</p>
17 <p>Чтобы создать эмулятор Android, выберите пункт Create Android Emulator…, как показано на скриншоте:</p>
17 <p>Чтобы создать эмулятор Android, выберите пункт Create Android Emulator…, как показано на скриншоте:</p>
18 <em>Скриншот: Skillbox Media</em><p>Откроется меню добавления устройства. Можно выбрать готовый шаблон из списка, разрядность, версию ОС и многие другие параметры. Не указывайте высокие характеристики, если используется слабый компьютер.</p>
18 <em>Скриншот: Skillbox Media</em><p>Откроется меню добавления устройства. Можно выбрать готовый шаблон из списка, разрядность, версию ОС и многие другие параметры. Не указывайте высокие характеристики, если используется слабый компьютер.</p>
19 <em>Скриншот: Skillbox Media</em><p>После создания устройства выберите его в списке и нажмите Start:</p>
19 <em>Скриншот: Skillbox Media</em><p>После создания устройства выберите его в списке и нажмите Start:</p>
20 <em>Скриншот: Skillbox Media</em><p>Эмулятор начнёт скачиваться. После установки его можно будет запустить, чтобы отлаживать приложения.</p>
20 <em>Скриншот: Skillbox Media</em><p>Эмулятор начнёт скачиваться. После установки его можно будет запустить, чтобы отлаживать приложения.</p>
21 <p>Другой способ - использовать физическое устройство. Для этого закройте Visual Studio и возьмите смартфон. В настройках найдите Build Version (название и расположение зависит от производителя) и нажмите на него семь раз подряд (это не шутка :)). После этого станут доступными настройки для разработчиков. В них нужно включить USB Debug и подключить устройство к компьютеру.</p>
21 <p>Другой способ - использовать физическое устройство. Для этого закройте Visual Studio и возьмите смартфон. В настройках найдите Build Version (название и расположение зависит от производителя) и нажмите на него семь раз подряд (это не шутка :)). После этого станут доступными настройки для разработчиков. В них нужно включить USB Debug и подключить устройство к компьютеру.</p>
22 <p>Откройте Visual Studio и запустите проект, выбрав подключённое устройство:</p>
22 <p>Откройте Visual Studio и запустите проект, выбрав подключённое устройство:</p>
23 <em>Скриншот: Skillbox Media</em><p>На устройстве откроется приложение, которое было создано по шаблону:</p>
23 <em>Скриншот: Skillbox Media</em><p>На устройстве откроется приложение, которое было создано по шаблону:</p>
24 <em>Скриншот: Skillbox Media</em><p>Поздравляю, первое приложение готово! Закройте его, чтобы вернуться к редактированию кода.</p>
24 <em>Скриншот: Skillbox Media</em><p>Поздравляю, первое приложение готово! Закройте его, чтобы вернуться к редактированию кода.</p>
25 <p>Приложение разделено на несколько подпроектов. В основном проекте находятся все файлы, с которыми предстоит работать. А в XamarinApp1.Android и XamarinApp1.iOS находится код для этих операционных систем.</p>
25 <p>Приложение разделено на несколько подпроектов. В основном проекте находятся все файлы, с которыми предстоит работать. А в XamarinApp1.Android и XamarinApp1.iOS находится код для этих операционных систем.</p>
26 <p>Основной проект компилируется в DLL-библиотеки и подключается к подпроектам. Это позволяет писать код один раз и запускать его везде - .NET Framework сам всё скомпилирует, чтобы запустить на разных ОС.</p>
26 <p>Основной проект компилируется в DLL-библиотеки и подключается к подпроектам. Это позволяет писать код один раз и запускать его везде - .NET Framework сам всё скомпилирует, чтобы запустить на разных ОС.</p>
27 <p>Мобильные приложения на Xamarin создаются с помощью страниц (экранов). По умолчанию основная страница - MainPage. Она состоит из двух файлов:</p>
27 <p>Мобильные приложения на Xamarin создаются с помощью страниц (экранов). По умолчанию основная страница - MainPage. Она состоит из двух файлов:</p>
28 <ul><li><strong>MainPage.xaml</strong>(язык XAML). Пользовательский интерфейс.</li>
28 <ul><li><strong>MainPage.xaml</strong>(язык XAML). Пользовательский интерфейс.</li>
29 <li><strong>MainPage.xaml.cs</strong>(язык C#). Основная логика приложения, обработка событий.</li>
29 <li><strong>MainPage.xaml.cs</strong>(язык C#). Основная логика приложения, обработка событий.</li>
30 </ul><p>Начать можно с файла разметки интерфейса. Напишем простой калькулятор:</p>
30 </ul><p>Начать можно с файла разметки интерфейса. Напишем простой калькулятор:</p>
31 &lt;?xml version="1.0" encoding="utf-8" ?&gt; &lt;ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="XamarinApp1.MainPage"&gt; &lt;StackLayout &gt; &lt;Label Text="Calc" Margin="5" FontSize="Large" FontAttributes="Bold"/&gt; &lt;StackLayout Orientation="Horizontal" Spacing="50" HorizontalOptions="CenterAndExpand"&gt; &lt;Entry x:Name="num1" WidthRequest="100" Keyboard="Numeric"/&gt; &lt;Label Text="+"/&gt; &lt;Entry x:Name="num2" WidthRequest="100" Keyboard="Numeric"/&gt; &lt;/StackLayout&gt; &lt;Label Text="=" Margin="5" HorizontalTextAlignment="Center"/&gt; &lt;Label x:Name="result" Margin="5" HorizontalTextAlignment="Center"/&gt; &lt;Button Text="Calculate" Clicked="Button_Clicked"/&gt; &lt;/StackLayout&gt; &lt;/ContentPage&gt;<p>Здесь всё находится внутри элемента &lt;ContentPage&gt;, который является аналогом &lt;Window&gt; из <a>WPF</a>. Внутри него содержится &lt;StackLayout&gt;, который позволяет разместить элементы последовательно. С помощью атрибута Orientation указывается направление элементов - вертикальное (по умолчанию) или горизонтальное.</p>
31 &lt;?xml version="1.0" encoding="utf-8" ?&gt; &lt;ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="XamarinApp1.MainPage"&gt; &lt;StackLayout &gt; &lt;Label Text="Calc" Margin="5" FontSize="Large" FontAttributes="Bold"/&gt; &lt;StackLayout Orientation="Horizontal" Spacing="50" HorizontalOptions="CenterAndExpand"&gt; &lt;Entry x:Name="num1" WidthRequest="100" Keyboard="Numeric"/&gt; &lt;Label Text="+"/&gt; &lt;Entry x:Name="num2" WidthRequest="100" Keyboard="Numeric"/&gt; &lt;/StackLayout&gt; &lt;Label Text="=" Margin="5" HorizontalTextAlignment="Center"/&gt; &lt;Label x:Name="result" Margin="5" HorizontalTextAlignment="Center"/&gt; &lt;Button Text="Calculate" Clicked="Button_Clicked"/&gt; &lt;/StackLayout&gt; &lt;/ContentPage&gt;<p>Здесь всё находится внутри элемента &lt;ContentPage&gt;, который является аналогом &lt;Window&gt; из <a>WPF</a>. Внутри него содержится &lt;StackLayout&gt;, который позволяет разместить элементы последовательно. С помощью атрибута Orientation указывается направление элементов - вертикальное (по умолчанию) или горизонтальное.</p>
32 <em>Скриншот: Skillbox Media</em><p>Посмотреть вид приложения можно с помощью инструмента Designer</p>
32 <em>Скриншот: Skillbox Media</em><p>Посмотреть вид приложения можно с помощью инструмента Designer</p>
33 <p>Текстовые блоки создаются с помощью элемента<em>&lt;Label&gt;</em>, а поля ввода - с помощью<em>&lt;Entry&gt;</em>. Кнопка - с помощью элемента<em>&lt;Button&gt;</em>. Полям ввода указывается атрибут<em>x: Name</em>, чтобы к ним можно было обратиться в коде C#. А для кнопки указывается обработчик события<em>Clicked</em>.</p>
33 <p>Текстовые блоки создаются с помощью элемента<em>&lt;Label&gt;</em>, а поля ввода - с помощью<em>&lt;Entry&gt;</em>. Кнопка - с помощью элемента<em>&lt;Button&gt;</em>. Полям ввода указывается атрибут<em>x: Name</em>, чтобы к ним можно было обратиться в коде C#. А для кнопки указывается обработчик события<em>Clicked</em>.</p>
34 <p>Теперь посмотрим, что происходит в коде MainPage.xaml.cs:</p>
34 <p>Теперь посмотрим, что происходит в коде MainPage.xaml.cs:</p>
35 using System; using System.Text; using System.Threading.Tasks; using Xamarin.Forms; namespace XamarinApp1 { [DesignTimeVisible(false)] public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); } private void Button_Clicked(object sender, EventArgs e) //Обработчик нажатия на кнопку { try { int n1 = Convert.ToInt32(num1.Text); //Конвертация значений из текстовых полей в числа int n2 = Convert.ToInt32(num2.Text); result.Text = (n1 + n2).ToString(); //Сложение полученных чисел, преобразование их обратно в строку и вывод в один из элементов &lt;Label&gt; } catch (Exception exc) { } } } }<p>Получился вот такой калькулятор:</p>
35 using System; using System.Text; using System.Threading.Tasks; using Xamarin.Forms; namespace XamarinApp1 { [DesignTimeVisible(false)] public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); } private void Button_Clicked(object sender, EventArgs e) //Обработчик нажатия на кнопку { try { int n1 = Convert.ToInt32(num1.Text); //Конвертация значений из текстовых полей в числа int n2 = Convert.ToInt32(num2.Text); result.Text = (n1 + n2).ToString(); //Сложение полученных чисел, преобразование их обратно в строку и вывод в один из элементов &lt;Label&gt; } catch (Exception exc) { } } } }<p>Получился вот такой калькулятор:</p>
36 <p>В принципе, Xamarin очень похож на WPF, поэтому разработчики приложений для Windows смогут быстро в него вникнуть - нужно только выучить новые названия элементов и понять различия в реализации привязки данных.</p>
36 <p>В принципе, Xamarin очень похож на WPF, поэтому разработчики приложений для Windows смогут быстро в него вникнуть - нужно только выучить новые названия элементов и понять различия в реализации привязки данных.</p>
37 <p>Теперь настроим приложение. Для этого зайдите в <em>Project → AppName Properties…:</em></p>
37 <p>Теперь настроим приложение. Для этого зайдите в <em>Project → AppName Properties…:</em></p>
38 <em>Скриншот: Skillbox Media</em><p>Откроется меню настроек:</p>
38 <em>Скриншот: Skillbox Media</em><p>Откроется меню настроек:</p>
39 <em>Скриншот: Skillbox Media</em><p>Там можно указать иконку, название, версию, описание и многое другое. Это нужно сделать, чтобы пользователи видели корректную информацию о приложении.</p>
39 <em>Скриншот: Skillbox Media</em><p>Там можно указать иконку, название, версию, описание и многое другое. Это нужно сделать, чтобы пользователи видели корректную информацию о приложении.</p>
40 <p>После того как приложение будет готово, его можно скомпилировать, чтобы потом передать на мобильное устройство для установки. Установочные пакеты надо искать в папках<em>Bin → Debug</em>необходимой платформы.</p>
40 <p>После того как приложение будет готово, его можно скомпилировать, чтобы потом передать на мобильное устройство для установки. Установочные пакеты надо искать в папках<em>Bin → Debug</em>необходимой платформы.</p>
41 <p>Однако, чтобы люди смогли им пользоваться, нужно загрузить его в Google Play и App Store. Впрочем, это уже совсем другая история :)</p>
41 <p>Однако, чтобы люди смогли им пользоваться, нужно загрузить его в Google Play и App Store. Впрочем, это уже совсем другая история :)</p>
42 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
42 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>