在Xamarin中隐藏软键盘

Voo*_*Voo 5 c# android xamarin.android xamarin xamarin.forms

Entry在Xamarin.forms便携式表单项目中聚焦时,如何隐藏软键盘以显示?我假设我们必须为此编写特定于平台的渲染器,但以下内容不起作用:

我创建自己的入口子类:

public class MyExtendedEntry : Entry
{
}
Run Code Online (Sandbox Code Playgroud)

然后在xamarin.android项目中我的渲染器:

public class MyExtendedEntryRenderer : EntryRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
    {
        base.OnElementChanged(e);
        if (Control != null)
        {
            new Handler().Post(delegate
            {
                var imm = (InputMethodManager)Control.Context.GetSystemService(Context.InputMethodService);
                var result = imm.HideSoftInputFromWindow(Control.WindowToken, 0);
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

OnElementChanged预期被调用,使用时,Handler.Post()我也得到了WindowToken而不是空的.遗憾的是,返回值HideSoftInputFromWindow始终为false,单击条目时软键盘仍会显示.

Ale*_*Lau 7

OnElementChanged每当视图初始化并附加到视图时调用。您想要做的是在单击条目时隐藏键盘,因此您应该将事件处理程序添加FocusChangeControl.

例子:

    protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
    {
        base.OnElementChanged(e);
        if (Control != null)
        {
            Control.Click += (sender, evt) => {
                new Handler().Post(delegate
                    {
                        var imm = (InputMethodManager)Control.Context.GetSystemService(Android.Content.Context.InputMethodService);
                        var result = imm.HideSoftInputFromWindow(Control.WindowToken, 0);

                        Console.WriteLine(result);
                    });
            };

            Control.FocusChange += (sender, evt) => {
                new Handler().Post(delegate
                    {
                        var imm = (InputMethodManager)Control.Context.GetSystemService(Android.Content.Context.InputMethodService);
                        var result = imm.HideSoftInputFromWindow(Control.WindowToken, 0);

                        Console.WriteLine(result);
                    });
            };
        }
    }
Run Code Online (Sandbox Code Playgroud)

更新:来自@Vikram 的综合答案

更新:添加了Click事件处理程序