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,单击条目时软键盘仍会显示.
OnElementChanged
每当视图初始化并附加到视图时调用。您想要做的是在单击条目时隐藏键盘,因此您应该将事件处理程序添加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);
});
};
}
}
Run Code Online (Sandbox Code Playgroud)
更新:来自@Vikram 的综合答案
更新:添加了Click
事件处理程序
归档时间: |
|
查看次数: |
7479 次 |
最近记录: |