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

MAUI中点击Entry输入框时如何阻止软键盘弹出?

如何在MAUI中阻止Entry点击时弹出软键盘?

针对你的场景(Entry仅接收扫描引擎条码输入,点击仅用于获取焦点),可以通过平台特定的自定义Handler来实现,核心思路是让Entry保持可聚焦状态,但禁用系统软键盘。以下是各平台的具体实现:

Android平台

创建自定义EntryHandler,修改EditText的InputType为Null,阻止软键盘弹出:

using Microsoft.Maui.Handlers;
using Android.Views.InputMethods;

namespace YourAppNamespace;

public class NoKeyboardEntryHandler : EntryHandler
{
    protected override void ConnectHandler(Maui.Controls.Entry platformView)
    {
        base.ConnectHandler(platformView);
        // 禁用软键盘触发
        PlatformView.InputType = Android.Text.InputTypes.Null;
        // 确保点击可获取焦点
        PlatformView.Focusable = true;
        PlatformView.FocusableInTouchMode = true;
    }
}

在MauiProgram.cs中注册该Handler:

builder.ConfigureMauiHandlers(handlers =>
{
#if ANDROID
    handlers.AddHandler<Entry, NoKeyboardEntryHandler>();
#endif
});

iOS平台

通过设置UITextField的InputView为空视图,拦截软键盘弹出:

using Microsoft.Maui.Handlers;
using UIKit;

namespace YourAppNamespace;

public class NoKeyboardEntryHandler : EntryHandler
{
    protected override void ConnectHandler(Maui.Controls.Entry platformView)
    {
        base.ConnectHandler(platformView);
        // 替换输入视图为空,阻止软键盘显示
        PlatformView.InputView = new UIView();
        // 允许交互获取焦点
        PlatformView.UserInteractionEnabled = true;
    }
}

同样在MauiProgram.cs中注册:

builder.ConfigureMauiHandlers(handlers =>
{
#if IOS
    handlers.AddHandler<Entry, NoKeyboardEntryHandler>();
#endif
});

Windows平台

设置TextBox的InputScope为None,禁用系统软键盘:

using Microsoft.Maui.Handlers;
using Microsoft.UI.Xaml.Controls;

namespace YourAppNamespace;

public class NoKeyboardEntryHandler : EntryHandler
{
    protected override void ConnectHandler(Maui.Controls.Entry platformView)
    {
        base.ConnectHandler(platformView);
        // 清空输入范围,阻止软键盘弹出
        PlatformView.InputScope = new InputScope();
        PlatformView.InputScope.Names.Add(new InputScopeName(InputScopeNameValue.None));
        // 确保可通过点击聚焦
        PlatformView.IsTabStop = true;
    }
}

注册代码:

builder.ConfigureMauiHandlers(handlers =>
{
#if WINDOWS
    handlers.AddHandler<Entry, NoKeyboardEntryHandler>();
#endif
});

单个Entry的局部实现(无需全局注册)

如果只有特定Entry需要该功能,可在HandlerChanged事件中针对性设置:
XAML:

<Entry x:Name="BarcodeEntry" HandlerChanged="BarcodeEntry_HandlerChanged" />

后台代码:

private void BarcodeEntry_HandlerChanged(object sender, EventArgs e)
{
    if (sender is not Entry entry) return;

#if ANDROID
    if (entry.Handler.PlatformView is Android.Widget.EditText androidEntry)
    {
        androidEntry.InputType = Android.Text.InputTypes.Null;
        androidEntry.Focusable = true;
        androidEntry.FocusableInTouchMode = true;
    }
#elif IOS
    if (entry.Handler.PlatformView is UIKit.UITextField iosEntry)
    {
        iosEntry.InputView = new UIKit.UIView();
    }
#elif WINDOWS
    if (entry.Handler.PlatformView is Microsoft.UI.Xaml.Controls.TextBox winEntry)
    {
        winEntry.InputScope = new Microsoft.UI.Xaml.Input.InputScope();
        winEntry.InputScope.Names.Add(new Microsoft.UI.Xaml.Input.InputScopeName(Microsoft.UI.Xaml.Input.InputScopeNameValue.None));
    }
#endif
}

以上设置完成后,点击Entry会正常获取焦点,但不会弹出软键盘,扫描引擎的模拟输入仍能被Entry接收,完全匹配你的需求。

内容的提问来源于stack exchange,提问作者DaveR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 14:35:29