Xamarin表单隐藏软键盘的自定义Entry渲染器

时间:2016-07-26 07:23:06

标签: android xamarin.forms android-softkeyboard android-keypad android-input-method

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

我熟悉自定义视图渲染的推荐Xamarin Forms模式,并已成功创建Entry及其渲染器,如下所示:

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。

例如,我知道我可以使用以下调用(来自InputMethodManager内)获取Activity的引用,但是如何从内部引用包含活动并不明显渲染器:

var imm = GetSystemService(InputMethodService)

提前感谢您的建议。

1 个答案:

答案 0 :(得分:0)

请在OnElementChanged()内填写此代码:

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

这样可以防止键盘在选择条目时出现而无需检查其焦点。

===编辑===

事实证明,ShowSoftInputOnFocus property实际上可以做到这一点。

Control.ShowSoftInputOnFocus = false;