Я пишу приложение Xamarin Forms (стандарт .NET 2.0). В настоящее время он разрабатывается только для Android, но в будущем может быть выпущен для других ОС. Сценарий, которым я пытаюсь управлять, таков:
- Пользователь переходит на ContentPage с помощью одной записи
Я даю фокус Entry, используя собственный код Android в настраиваемом рендерере:
if (e.NewElement != null && e.NewElement is CustomEntry) { CustomEntry customEntry = (CustomEntry)e.NewElement; if(customEntry.GiveFocus) { //this messes up the onback behaviour - you have to press onback twice to exit the screen, once to get out of the hidden SIP Control.RequestFocus(); } }
Я не хочу, чтобы программная клавиатура выскакивала автоматически. Поэтому я добавил следующую строку в OnCreate MainActivity:
Window.SetSoftInputMode(SoftInput.StateAlwaysHidden);
Причина, по которой я запрашиваю фокус в пользовательском средстве визуализации, а не в записи Xamarin Forms, заключается в том, что я мог видеть всплывающее окно клавиатуры, а затем сразу же исчезать, когда я запрашивал его в элементе управления Xamarin Forms. Я не хочу, чтобы клавиатура появлялась, поскольку это приложение будет в основном использоваться пользователями промышленных устройств с аппаратной клавиатурой, но запись должна иметь фокус, поскольку пользователи захотят сразу же ввести в нее текст.
Моя проблема в том, что в этом сценарии пользователь должен дважды нажать кнопку «Назад», чтобы выйти из ContentPage. Один раз для выхода из скрытой клавиатуры (и Entry теряет фокус), а затем еще раз для выхода со страницы. Я хочу избежать этого - они должны иметь возможность выходить со страницы одним щелчком мыши, когда клавиатура скрыта. Кто-нибудь знает, как это решить? Я попытался переопределить OnKeyPreIme в пользовательском рендерере, как предлагали другие ответы, но, похоже, он не обнаруживает обратный щелчок.