0

В приложении 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

ответ

0

Попробуйте это вместо того, чтобы внутри OnElementChanged():

Control.InputType = Android.Text.InputTypes.Null; 

Это предотвратит появление клавиатуры при выборе записи без необходимости проверки его фокуса.

=== Редактирование ===

Оказывается, есть на самом деле ShowSoftInputOnFocusproperty для делать именно это.

Control.ShowSoftInputOnFocus = false; 
+0

Это выглядит очень элегантное решение, но задание игнорируется. Если я установил точку останова сразу после установки значения свойства InputType, я вижу, что он установлен на Android.Text.InputTypes.DatetimeVariationNormal. –

Смежные вопросы