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

Xamarin.Forms中使用KeyboardHelper如何彻底阻止安卓键盘弹出?

解决Xamarin.Forms安卓端Entry获焦时键盘先弹后关导致的屏幕跳动问题

你遇到的问题根源在于KeyboardHelper是等键盘弹出后再强制关闭,自然会引发屏幕跳动。要实现键盘完全不弹出,直接在安卓原生层面拦截键盘弹出的触发逻辑就行,具体步骤如下:

1. 在共享项目中创建自定义Entry控件

using Xamarin.Forms;

namespace YourAppName.Controls
{
    // 自定义无键盘Entry
    public class NoKeyboardEntry : Entry
    {
    }
}

2. 安卓项目中添加自定义渲染器

using Android.Content;
using YourAppName.Controls;
using YourAppName.Droid.Renderers;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(NoKeyboardEntry), typeof(NoKeyboardEntryRenderer))]
namespace YourAppName.Droid.Renderers
{
    public class NoKeyboardEntryRenderer : EntryRenderer
    {
        public NoKeyboardEntryRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                // 核心设置:获焦时不弹出软键盘
                Control.ShowSoftInputOnFocus = false;
                // 可选:禁用长按唤起输入法选项的行为
                Control.LongClickable = false;
            }
        }
    }
}

3. 在XAML中使用自定义控件

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:controls="clr-namespace:YourAppName.Controls"
             x:Class="YourAppName.MainPage">

    <controls:NoKeyboardEntry Placeholder="点击我不会弹出键盘" />

</ContentPage>

这种方案直接在安卓原生EditText控件层面禁用了获焦弹键盘的逻辑,从根源上避免了键盘先弹后关的问题,自然也就不会出现屏幕跳动的情况。如果后续需要手动控制键盘的弹出/关闭,可以给自定义Entry添加绑定属性,动态调整ShowSoftInputOnFocus的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:32:41