MAUI中禁用Entry控件键盘后如何重新启用?
MAUI Entry控件软键盘禁用与动态启用问题
我开发了一款条码应用,需要禁用Entry控件的软键盘,目前找到了可行的全局配置方法:
var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); Microsoft.Maui.Handlers.EntryHandler.Mapper.AppendToMapping("NoKeyboardEntry", (handler, entry) => { #if ANDROID handler.PlatformView.ShowSoftInputOnFocus = false; #endif })
但我还需要支持手动输入模式,尝试调用MyEntry.ShowKeyboardAsync(CancellationToken.None)却无效,请问如何在应用运行时,重新启用通过上述方法禁用的Entry控件键盘?
补充实现方案
很多人询问相关处理方式,以下是我实现的完整方案:通过Entry接收HID条码扫描输入,使用复选框控制是否保持Entry焦点并完全禁用软键盘,取消勾选则重新启用键盘。特别感谢Liyun Zhang提供的键盘启用/禁用方法。
XAML代码
<!-- 控制焦点保持与键盘禁用的复选框 --> <CheckBox x:Name="cb_KeepFocus" CheckedChanged="OnKeepFocusClicked"/> <!-- 接收HID条码输入的Entry --> <Entry x:Name="tx_ConfirmationNumber"/>
C#后台代码
public MainPage() { InitializeComponent(); // 每3秒检查一次,若复选框勾选则自动恢复Entry焦点 var KeepFocusTimer = Application.Current.Dispatcher.CreateTimer(); KeepFocusTimer.Interval = TimeSpan.FromSeconds(3); KeepFocusTimer.Tick += (s, e) => OnKeepFocusTimer(); KeepFocusTimer.Start(); } private void OnKeepFocusTimer() { MainThread.BeginInvokeOnMainThread(() => { if (cb_KeepFocus.IsChecked == true && !tx_ConfirmationNumber.IsFocused) { tx_ConfirmationNumber.Focus(); } }); } // 切换焦点保持与键盘状态 private void OnKeepFocusClicked(object sender, CheckedChangedEventArgs e) { if (cb_KeepFocus.IsChecked == true && !tx_ConfirmationNumber.IsFocused) { tx_ConfirmationNumber.Focus(); } if (cb_KeepFocus.IsChecked == true) { DisableKeyboard(); } else { EnableKeyboard(); } } private void DisableKeyboard() { #if ANDROID (tx_ConfirmationNumber.Handler.PlatformView as AndroidX.AppCompat.Widget.AppCompatEditText).ShowSoftInputOnFocus = false; #endif } private void EnableKeyboard() { #if ANDROID (tx_ConfirmationNumber.Handler.PlatformView as AndroidX.AppCompat.Widget.AppCompatEditText).ShowSoftInputOnFocus = true; #endif }
内容的提问来源于stack exchange,提问作者Austin
相关产品推荐
相关产品推荐

