0

在Xamarin Forms应用程序中,我试图创建一个自定义Entry实现,该实现在聚焦时不会自动显示软键盘。目标是在页面上使用此条目的一个实例以及其他常规条目。Xamarin形成隐藏软键盘的自定义条目渲染器

我熟悉的建议Xamarin窗体模式自定义视图渲染,并且已成功创建两个入口和它的渲染器,如下:

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的建议将提供解决方案,但对于哪种方法是最佳方法有许多不同意见。另外,即使在选择合适的模式后,我也不清楚如何从上述自定义渲染器中访问所需的原生Android API。

例如,我知道我可以使用下面的呼叫(从Activity内)获得到一个InputMethodManager的引用,但是它并不明显如何从渲染器内引用的含活性:

var imm = GetSystemService(InputMethodService) 

非常感谢您的建议。

回答

0

OnElementChanged()试试这个:

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

这将防止键盘,而不必检查其重点是选择条目时出现。

===编辑===

原来居然还有就是ShowSoftInputOnFocusproperty可正是这种做。

Control.ShowSoftInputOnFocus = false; 
+0

这看起来像一个非常优雅的解决方案,但分配被忽略。如果在设置InputType属性值后立即设置断点,我可以看到它设置为Android.Text.InputTypes.DatetimeVariationNormal。 –