如何隐藏软键盘以便在聚焦时显示Entry
在 Xamarin.forms 便携式表单项目中?我假设我们必须为此编写特定于平台的渲染器,但以下内容不起作用:
我创建自己的条目子类:
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);
});
}
}
}
The OnElementChanged
被按预期调用并且使用时Handler.Post()
我还得到一个 WindowToken 而不是 null。遗憾的是返回值来自HideSoftInputFromWindow
始终为 false,并且单击条目时软键盘仍然会出现。
OnElementChanged
每当视图初始化并附加到视图时都会调用。您想要做的是在单击条目时隐藏键盘,因此您应该添加一个事件处理程序FocusChange
to the Control
.
Example:
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);
});
};
}
}
Update:@Vikram 的综合答案
Update: Added Click
事件处理程序
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)