В помощь мобильному разработчику

Размещение экранной клавиатуры в Xamarin Forms

Александр Алексеев

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

Страница Xamarin Forms

В качестве отправного пункта здесь представлена элементарная составляющая страницы Xamarin Forms, создающая 3 секции, на каждой из которых присутствует поле ввода. Сэмпл проекта SoftInput доступен, и с ним можно ознакомиться, если хочется посмотреть на завершенный код.

 

Android

Android будет часто ссылаться на экранную клавиатуру, выступающую в качестве SoftInput. По умолчанию в Xamarin Forms он использует AdjustPan, который перемещает весь экран вверх, чтобы освободить место для клавиатуры. В результате возникает один проблемный побочный эффект в виде того, что верхняя часть экрана становится недоступной, когда показывается клавиатура.

Если же необходимо изменить размер экрана, тогда следует реализовать два фрагмента кода. Сначала в MainActivity указать SoftInputMode для AdjustResize.

 

Далее, из-за ошибки в Android, которую в нём всё никак не исправят, нам необходимо реализовать обходной путь.

 

А затем добавить указанное ниже к строке SetSoftInputMode.

 

Ландшафтный режим

Однако, в горизонтальной ориентации Android переходит в полноэкранный режим, как показано ниже.

Это можно отключить путем реализации пользовательского средства визуализации для поля ввода с помощью установки флага ImeOptions в NoExtractUi.

Посредством реализации этого получается примерно то же самое, что и в портретном режиме.

iOS

По умолчанию в iOS всё это делается ещё более легко. По умолчанию здесь будет выдвигаться AdjustPan, но тут можно просматривать весь контент с помощью прокрутки. Тем не менее для работы скроллинга требуется реализовать ScrollView рядом с контентом, прокрутка которого является возможной. Это не имеет никакого эффекта на Android.

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

UWP

UWP относится к экранной клавиатуре, как к Input Pane. По умолчанию UWP использует AdjustPan так же, как и Android, — без возможности прокрутки.

С тем чтобы произвести изменение размера, я объединяю вот этот код в MainPage.cs

 

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

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

 

Автор: Adam Pedley
ИсточникXamarinHelp.com

Александр Алексеев
Александр Алексеев

Xamarin - разработчик. Работаю с .NET платформой с 2012 года, программирую в основном с использованием C#. За это время успел поработать с ASP.NET, Entity Framework, MSSQL, Git

VSTS и HockeyApp
Android HAXM

Написать ответ