我在这个链接中找到了一个看起来很有用的内容:
但是它似乎只在Xamarin Forms中起作用。 我甚至在我的MAUI应用程序中使用它,但它根本没有效果!
我之所以要这样做,是因为我想启用对编辑器字段的焦点,但又不想触发软键盘(用于条形码扫描器字段)。
谢谢。
我在这个链接中找到了一个看起来很有用的内容:
但是它似乎只在Xamarin Forms中起作用。 我甚至在我的MAUI应用程序中使用它,但它根本没有效果!
我之所以要这样做,是因为我想启用对编辑器字段的焦点,但又不想触发软键盘(用于条形码扫描器字段)。
谢谢。
它比你想象的更简单 :)
private void SingInButton_Clicked(object sender, EventArgs e)
{
//Trick To Hide VirtualKeyboard
PasswordEntry.IsEnabled = false;
PasswordEntry.IsEnabled = true;
}
}
在 MAUI 中显示软键盘,请将焦点设置到可编辑的控件。
在 MAUI 中隐藏软键盘,请从可编辑控件中移除焦点。您可以通过代码或当用户单击按钮时简单地移动焦点。
以上行为在 Xamarin Forms 中运作良好,但是 MAUI 目前存在一个错误。一旦软键盘被打开,它就无法被隐藏。
目前的解决方法是禁用编辑控件然后再启用,这样可以隐藏键盘,以下是代码片段: this.DescriptionEditor.IsEnabled = false; this.DescriptionEditor.IsEnabled = true;
请参见下面的链接: 如何在 Xamarin Forms 中通过按钮按下来关闭键盘
namespace ApplicationName.Platforms
{
public static partial class KeyboardHelper
{
public static void HideKeyboard()
{
var context = Platform.AppContext;
var inputMethodManager = context.GetSystemService(Context.InputMethodService) as InputMethodManager;
if (inputMethodManager != null)
{
var activity = Platform.CurrentActivity;
var token = activity.CurrentFocus?.WindowToken;
inputMethodManager.HideSoftInputFromWindow(token, HideSoftInputFlags.None);
activity.Window.DecorView.ClearFocus();
}
}
}
}
在Platforms/iOS/KeyboardHelper.cs中
namespace ApplicationName.Platforms
{
public static partial class KeyboardHelper
{
public static void HideKeyboard()
{
UIApplication.SharedApplication.KeyWindow.EndEditing(true);
}
}
}
这就是全部内容。
然后在您的应用程序中只需调用:
Platforms.KeyboardHelper.HideKeyboard();
调用函数。将运行的类取决于平台。
UIApplication.SharedApplication.Delegate.GetWindow().EndEditing(true);
我现在无法测试它。 - Michele你需要首先创建一个接口。
public interface IKeyboardHelper
{
public void HideKeyboard();
}
您需要在Platforms> Android > Dependencies中创建相关的类。 示例代码:
public class DroidKeyboardHelper : IKeyboardHelper
{
public DroidKeyboardHelper()
{
}
public void HideKeyboard()
{
var context = Android.App.Application.Context;
var inputMethodManager = context.GetSystemService(Context.InputMethodService) as InputMethodManager;
if (inputMethodManager != null )
{
var activity = Platform.CurrentActivity;
var token = activity.CurrentFocus?.WindowToken;
inputMethodManager.HideSoftInputFromWindow(token, HideSoftInputFlags.None);
activity.Window.DecorView.ClearFocus();
}
}
}
命名空间应该具备以下特点:
[assembly: Dependency(typeof(DroidKeyboardHelper))]
在 app.xaml.cs 中注册
DependencyService.Register<Platforms.Droid.Dependenices.DroidKeyboardHelper>();
然后在调用位置使用
DependencyService.Get<IKeyboardHelper>().HideKeyboard();
我只是想补充一下,我发现将entry类进行子类化很有帮助。这样做可以避免你在每个地方都调用隐藏键盘的方法。因此,只要你在所有标签中使用CustomEntry,就可以顺利进行了。 (请注意,这篇文章与其他文章一起阅读,特别是Michele的文章。)
public class CustomEntry : Entry
{
public CustomEntry()
{
Completed += OnCompleted;
}
private void OnCompleted(object sender, EventArgs e)
{
KeyboardClosingService.HideKeyboard();
}
}
builder
.UseMauiCompatibility()
.ConfigureMauiHandlers((handlers) => {
#if ANDROID
handlers.AddCompatibilityRenderer(typeof(yournamespaceofhelper.SoftkeyboardDisabledEntry),typeof(yournamespaceonAndroid.SoftkeyboardDisabledEntryRenderer)); #endif})
2. 创建一个帮助器(你将使用它来禁用键盘):
public class SoftkeyboardDisabledEntry : Entry
{
}
回答你对亚历山大说的问题,如果你触摸了编辑器,键盘将会保持隐藏
附注:我找不到让代码可读的方法,如果有人能够编辑它,将不胜感激
public void HideKeyboard()
{
#if (ANDROID)
{
var context = Platform.AppContext;
var inputMethodManager = context.GetSystemService(Context.InputMethodService) as InputMethodManager;
if (inputMethodManager != null)
{
var activity = Platform.CurrentActivity;
if (activity != null)
{
var token = activity.CurrentFocus?.WindowToken;
inputMethodManager.HideSoftInputFromWindow(token, HideSoftInputFlags.None);
}
if (activity?.Window != null) activity.Window.DecorView.ClearFocus();
}
}
#elif (IOS)
{
if (UIApplication.SharedApplication?.KeyWindow != null) UIApplication.SharedApplication.KeyWindow.EndEditing(true);
}
#endif
}