gpt4 book ai didi

c# - 在 Xamarin 中隐藏软键盘

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:31:28 25 4
gpt4 key购买 nike

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

我创建自己的入口子类:

public class MyExtendedEntry : Entry
{
}

然后在 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);
});
}
}
}

OnElementChanged 按预期调用,使用 Handler.Post() 时我还得到一个 WindowToken 而不是 null。遗憾的是,HideSoftInputFromWindow 的返回值始终为 false,并且在单击条目时软键盘仍然出现。

最佳答案

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

示例:

    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);
});
};
}
}

更新 来自@Vikram 的综合回答

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

关于c# - 在 Xamarin 中隐藏软键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28835195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com