. net MAUI输入键盘不隐藏



我有一个非常简单的UI,它有一个输入控件来输入电话号码和一个按钮。输入控件有一个处理程序,用于删除其周围的边框。当输入控制被聚焦时,键盘弹出。但当我尝试在输入控制之外(比如屏幕空白区域)点击时,键盘不会消失,输入控制也不会失去焦点。此外,由于按钮位于屏幕底部,因此软键盘将其隐藏起来,因此无法点击按钮。只有按下安卓设备的返回键才能轻按该按钮。

目前,我还没有在iOS设备上检查此行为。

这在Xamarin Forms中不是问题。我在网上搜索了很多,发现它目前是MAUI的一个bug。

我试图在父布局控件上附加一个点击手势,并调用特定于平台的代码来隐藏键盘,但似乎条目并没有失去焦点,反过来,点击手势事件从未被调用。

但是,当我轻按输入控件外(例如屏幕上)时,输入控件应该自动失去焦点,软键盘应该自动关闭。

如果有,请提供一个解决方案。

已知错误。转移注意力有时会有帮助。有时您需要按顺序执行禁用/启用。(我选第二个)。

如果你愿意,你可以这样读:https://github.com/dotnet/maui/issues/12002

(最令人不安的部分,考虑到这是半年+的已知bug)

我们可以在NET7中保留这种行为,并提供一个NET8中的API允许用户在iOS和Android

变通方案

private async void OnShowKeyboardTapped(object sender, EventArgs e)
{
EntryInput.Focus();
await Task.Delay(100); // Important to add delay here
Helpers.KeyboardVisibility(true);
}
private async void OnHideKeyboardTapped(object sender, EventArgs e)
{
Helpers.KeyboardVisibility(false);
}
private void KeyboardVisibility(bool StateFocus)
{
#if ANDROID
if (Platform.CurrentActivity.CurrentFocus != null)
{
if (StateFocus)
{            
Platform.CurrentActivity.ShowKeyboard(Platform.CurrentActivity.CurrentFocus);
}
else
{       Platform.CurrentActivity.HideKeyboard(Platform.CurrentActivity.CurrentFocus);
Platform.CurrentActivity.CurrentFocus.ClearFocus();
}
}
#endif
}

我遇到了这个问题。我是这样解决的:

Entry entry = new Entry { };

void OnEntryCompleted(object sender, EventArgs e) {
string text = ((Entry)sender).Text;            
entry.IsEnabled = false;
entry.IsEnabled = true;
}
entry.Completed += OnEntryCompleted;

具体来说,当按下Done按钮(entry.Completed)时,. isenabled被设置为false,是关闭虚拟键盘的操作。这将完全禁用输入字段,但保留已输入的值。我确保将. isenabled设置回true,以便用户可以再次编辑该字段。

希望对你有帮助。

最新更新