You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 00:20:04