В приложении Xamarin Forms я пытаюсь создать пользовательскую реализацию Entry
, которая автоматически не отображает мягкую клавиатуру, когда она сфокусирована. Цель состоит в том, чтобы использовать один экземпляр этой записи наряду с другими обычными элементами на странице.Xamarin Forms custom Entry renderer, который скрывает мягкую клавиатуру
Я знаком с рекомендованным Xamarin Forms шаблон для вида в рендеринге, и успешно создали как запись и ее визуализации, следующим образом:
public class BlindEntry : Entry
{
}
[assembly: ExportRenderer(typeof(BlindEntry), typeof(BlindEntryRenderer))]
public class BlindEntryRenderer : EntryRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.FocusChange += Control_FocusChange;
}
}
private void Control_FocusChange(object sender, FocusChangeEventArgs e)
{
if (e.HasFocus)
{
// What goes here?
}
else
{
// What goes here?
}
}
}
Чтобы показать или скрыть экранную клавиатуру, я представляю одну рекомендации от this question предоставят решение, но есть много разных мнений, по которым наилучший подход. Кроме того, даже после выбора подходящего шаблона я не понимаю, как получить доступ к необходимым родным API-интерфейсам Android из указанного выше средства визуализации.
Например, я знаю, что я могу получить ссылку на InputMethodManager
, используя следующий вызов (из внутри Activity
), но это не так очевидно, как ссылаться на содержащий активность внутри визуализатора:
var imm = GetSystemService(InputMethodService)
Заранее благодарим за ваши предложения.
Tim
Это выглядит очень элегантное решение, но задание игнорируется. Если я установил точку останова сразу после установки значения свойства InputType, я вижу, что он установлен на Android.Text.InputTypes.DatetimeVariationNormal. –