Xamarin.Forms поставляется с более чем 40 страницами, лейаутами и средствами управления, за счёт которых Вы можете разрабатывать красивые нативные приложения, работающие на iOS, Android и Windows 10. В добавление к большим преимуществам совместного использования кода, одной из моих любимых особенностей Xamarin.Forms является то, что он не ограничивает нас в функциональных возможностях приложений: нам доступны 100% средств контроля и API-интерфейсов iOS, Android и Windows. Вам доступно множество средств для использования возможностей конкретной платформы при разработке приложений на Xamarin.Forms, например, пользовательские рендереры, нативная декларация отображения, а также эффекты.
Сегодня мы с радостью представляем новый способ внедрения нативной функциональности в кросс-платформенные мобильные приложения, который является частью предварительного релиза Xamarin.Forms 2.3.3 с поддержкой функции platform-specifics. Благодаря этой функции «конкретной платформы» разработчикам стали доступны невероятные возможности нативной функциональности, которая поддерживается только на некоторых платформах, являющихся целевыми для Xamarin.Forms. Из этой статьи Вы узнаете, как использовать некоторые возможности этой, находящейся на стадии предварительной сборки, «платформозависимой» функции Xamarin.Forms и как создавать собственную «платформенную специфику».
Введение в платформозависимось
Подготовительный этап
Для использования платформозависимости необходима установка последней стабильной версии с канала обновлений, благодаря чему Вы также сможете использовать в приложениях преимущества новых API-интерфейсов iOS 10 и Android Nougat. В предварительный релиз Xamarin.Forms 2.3.3 введена поддержка платформозависимости, а также нативной декларации отображения и привязки данных, следовательно, вы должны установить, по крайней мере, эту версию Xamarin.Forms, чтобы использовать данную функцию. Напомним, что какую бы версию Xamarin.Forms Вы не устанавливали, не нужно обновлять любой из пакетов Xamarin.Android.Support, так как Xamarin.Forms самостоятельно осуществит автоматическое обновление этих пакетов, если их более новая совместимая версия будет доступна.
Что собой представляет платформозависимость?
Благодаря платформозависимости, Вы можете с лёгкостью реализовать функции или варианты поведения приложения, которые применяются только к одной платформе, без необходимости в пользовательских рендерах. Вы можете просто использовать Platform-specifics с помощью быстрого кода API или XAML. Платформозависимость аналогична по своей работе эффектам, за исключением того, что эта функция, как правило, доступна только на одной платформе, например, в случае с полупрозрачной панелью навигации на iOS. Таким образом, API-оболочка Xamarin.Forms вмещает в себя такие функции, которые доступны только на определенных платформах, и за счёт этого в ней по умолчанию присутствуют дополнительные возможности для кастомизации.
Использование платформозависимости
Начать использование платформозависимости можно с двух простых шагов:
- Привнести в Forms.PlatformConfiguration обычные и согласованные пространства имен, ну и также согласованные с платформозависимостью пространства имен (например, Xamarin.Forms.PlatformConfiguration.iOSSpecific, Xamarin.Forms.PlatformConfiguration.AndroidSpecific и т.д.).
- Начать применение platform-specific, используя On<T>() функцию API.
Вот несколько платформозависимых встроек Xamarin.Forms доступных для использования прямо сейчас:
- [iOS] Поддержка Blur для любого визуального элемента.
- [iOS] Полупрозрачная панель навигации.
- [Windows] Настройки размещения панели инструментов.
- [Windows] Частично свёрнутая панель навигации (с пиктограммами) в мастере детализации страницы.
- [Android] Регулировка изменения размера/Регулировка прокрутки.
Давайте применим платформозависимую функцию Xamarin.Forms для создания расплывчатости у любого визуального элемента в iOS. Мы создадим приложение, которое демонстрирует логотип Xamarin, наряду с несколькими кнопками для изменения эффекта размытия на изображении. Убедитесь, что ваш NuGets у Xamarin.Forms во всех проектах установлен, по крайней мере, на пререлизной версии Xamarin.Forms 2.3.3. Добавьте следующий XAML-код на пустую XAML-страницу:
1 2 3 4 5 6 7 8 9 10 11 | <!--?xml version="1.0" encoding="utf-8"?--> <?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="https://goo.gl/SkKd9T" xmlns:x="https://goo.gl/korsZp" xmlns:local="clr-namespace:PlatformSpecifics" x:Class="PlatformSpecifics.PlatformSpecificsPage"> <StackLayout> <Image x:Name="logo" Source="Xamagon.png" HeightRequest="250" WidthRequest="250"/> <Button x:Name="button1" Text="No Blur"/> <Button x:Name="button2" Text="Extra Light Blur"/> <Button x:Name="button3" Text="Light Blur"/> <Button x:Name="button4" Text="Dark Blur"/> </StackLayout> </ContentPage> |
Этот XAML будет работать на любой платформе, но предположим, что нам надо придать особый колорит изображению на iOS, добавив ему эффект расплывчатости. Давайте применим в приведенном выше коде встроенную платформозависимую функцию для размытия элементов интерфейса, когда кнопка будет нажата.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | using Xamarin.Forms; using Xamarin.Forms; using Xamarin.Forms.PlatformConfiguration; using Xamarin.Forms.PlatformConfiguration.iOSSpecific; namespace PlatformSpecifics { public partial class PlatformSpecificsPage : ContentPage { public PlatformSpecificsPage() { InitializeComponent(); button1.Clicked += (sender, e) => { logo.On<Xamarin.Forms.PlatformConfiguration.iOS>().UseBlurEffect(BlurEffectStyle.None); }; button2.Clicked += (sender, e) => { logo.On<Xamarin.Forms.PlatformConfiguration.iOS>().UseBlurEffect(BlurEffectStyle.ExtraLight); }; button3.Clicked += (sender, e) => { logo.On<Xamarin.Forms.PlatformConfiguration.iOS>().UseBlurEffect(BlurEffectStyle.Light); }; button4.Clicked += (sender, e) => { logo.On<Xamarin.Forms.PlatformConfiguration.iOS>().UseBlurEffect(BlurEffectStyle.Dark); }; } } } |
Создайте приложение и раскройте его в iOS Simulator, и вы сможете применить платформозависимую функцию размытия логотипа Xamagon.
Если же попробовать запустить приложение для Android на эмуляторе или физическом устройстве, то вы заметите, что платформозависимая функция недоступна, и при нажатии кнопки, применяющей расплывчатость, никаких действий не происходит.
Разработан c открытым исходным кодом
Как и Xamarin SDK, исходный код которых является открытым и доступен на GitHub, Xamarin.Forms тоже разработан на основе открытого исходного кода! Мы заинтересованы в том, чтобы разработчики могли без особого труда вносить собственный вклад в Xamarin.Forms. Мы получили уже целый ряд запросов на включение в Xamarin.Forms новых платформозависимых функций, поэтому если у вас есть идеи о том, каких аналогичные возможностей недостает Xamarin.Forms, то не забудьте отправить запрос свой pull-запрос с предложением о добавлении конкретных функций, которые Вам необходимы. Под участием в работе над проектом подразумевается не только написание кода, существует много различных возможностей для привнесения вклада в нашу работу.
Вы можете высказать свое мнение (сообщить об ошибках в работе) через обратную связь на форумах Xamarin и Bugzilla.
Заключение
Из этой статьи Вам стало известно, как использовать новые платформозависимые функции в Xamarin.Forms версии 2.3.3 и выше для внедрения функциональности, которая доступна только на некоторых платформах, в приложения, построенные на общем коде. Для получения дополнительной информации о платформозависимости посетить форум Xamarin. Для получения полного списка функций платформозависимости ознакомьтесь с нашей Platform Specifics Gallery. Примеры, использовавшиеся в этой статье доступны для скачивания на моем GitHub.
Автор: Pierce Boggan
Источник: Официальный блог Xamarin
Очень удобная штука, потребность для каждой платформы писать свои рендеры теперь уменьшилась, но увы полностью без них пока что не обойтись.