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

.NET MAUI Editor控件非数字/电话键盘无Done按钮问题求助

.NET MAUI Editor 键盘添加Done按钮的解决方案

除了点击屏幕其他区域关闭键盘外,你可以通过以下两种原生适配方式让键盘显示Done按钮:

1. 使用自定义渲染器(传统方式)

分别针对Android和iOS平台实现自定义渲染器,修改键盘的返回键类型为Done,并绑定关闭逻辑:

Android 端实现

[assembly: ExportRenderer(typeof(Editor), typeof(CustomEditorRenderer))]
namespace YourAppName.Droid
{
    public class CustomEditorRenderer : EditorRenderer
    {
        public CustomEditorRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
        {
            base.OnElementChanged(e);
            if (Control == null) return;

            // 设置键盘动作按钮为Done
            Control.ImeOptions = Android.Views.InputMethods.ImeAction.Done;
            Control.SetImeActionLabel("Done", Android.Views.InputMethods.ImeAction.Done);
            
            // 监听Done按钮点击,关闭键盘
            Control.EditorAction += (sender, args) =>
            {
                if (args.ActionId == Android.Views.InputMethods.ImeAction.Done)
                {
                    Element.Unfocus();
                }
            };
        }
    }
}

iOS 端实现

[assembly: ExportRenderer(typeof(Editor), typeof(CustomEditorRenderer))]
namespace YourAppName.iOS
{
    public class CustomEditorRenderer : EditorRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
        {
            base.OnElementChanged(e);
            if (Control == null) return;

            // 设置返回键为Done
            Control.ReturnKeyType = UIKit.UIReturnKeyType.Done;
            
            // 监听Done按钮点击,关闭键盘
            Control.ShouldReturn += (textField) =>
            {
                Element.Unfocus();
                return true;
            };
        }
    }
}

2. 使用MAUI Handlers(推荐的现代方式)

在MauiProgram.cs中配置Editor的Handler,无需创建单独的渲染器类:

builder.ConfigureMauiHandlers(handlers =>
{
#if ANDROID
    handlers.AddHandler<Editor, EditorHandler>(handler =>
    {
        handler.PlatformView.ImeOptions = Android.Views.InputMethods.ImeAction.Done;
        handler.PlatformView.SetImeActionLabel("Done", Android.Views.InputMethods.ImeAction.Done);
        handler.PlatformView.EditorAction += (s, args) =>
        {
            if (args.ActionId == Android.Views.InputMethods.ImeAction.Done)
            {
                handler.VirtualView.Unfocus();
            }
        };
    });
#elif IOS
    handlers.AddHandler<Editor, EditorHandler>(handler =>
    {
        handler.PlatformView.ReturnKeyType = UIKit.UIReturnKeyType.Done;
        handler.PlatformView.ShouldReturn += (textField) =>
        {
            handler.VirtualView.Unfocus();
            return true;
        };
    });
#endif
});

以上两种方式均能让非Numeric、Telephone样式的键盘显示Done按钮,点击按钮即可关闭键盘,完全适配原生平台交互逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:22:45