Xamarin Android端DisplayPromptAsync无法禁止输入联想的问题求助
问题根因
Xamarin Forms 自带的 DisplayPromptAsync 在 Android 端的键盘参数映射存在兼容问题,就算你没有开启 Suggestions 相关标记,部分系统和第三方输入法也不会遵守该配置,依然会弹出联想提示。
解决方案
方案1:快速调整键盘参数(优先尝试)
创建键盘时仅保留需要的大写标记,避免多余配置触发联想逻辑,可先尝试修改代码:
// 明确仅开启字符大写,其余所有键盘相关特性全部默认关闭 Keyboard kb = Keyboard.Create(KeyboardFlags.CapitalizeCharacter);
如果上述调整依然无效,说明你的目标设备输入法不遵守标准键盘标记,需要用方案2彻底解决。
方案2:自定义输入弹窗+Renderer适配(兼容性最好)
自带的 DisplayPromptAsync 可控性极低,建议自行实现输入弹窗,搭配自定义Entry实现全平台无联想效果:
- 共享项目中创建自定义Entry类
public class NoSuggestionEntry : Entry { }
- Android端添加自定义Renderer,强制设置输入属性关闭联想
using Android.Content; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; [assembly: ExportRenderer(typeof(NoSuggestionEntry), typeof(NoSuggestionEntryRenderer))] namespace 你的项目命名空间.Droid.Renderers { public class NoSuggestionEntryRenderer : EntryRenderer { public NoSuggestionEntryRenderer(Context context) : base(context) { } protected override void OnElementChanged(ElementChangedEventArgs<Entry> e) { base.OnElementChanged(e); if (Control != null) { // 强制关闭联想、自动更正、拼写检查,所有输入法都会遵守密码类输入的无联想规则,同时输入内容保持可见 Control.InputType = Android.Text.InputTypes.ClassText | Android.Text.InputTypes.TextFlagNoSuggestions | Android.Text.InputTypes.TextFlagNoAutoCorrect | Android.Text.InputTypes.TextVariationVisiblePassword; } } } }
- 用第三方弹窗库或者原生的
ContentView自行实现输入弹窗,将弹窗中的输入框替换为NoSuggestionEntry即可,后续适配iOS时也可以直接在iOS端添加对应的Renderer调整属性,适配成本极低。
内容的提问来源于stack exchange,提问作者Charles
相关产品推荐
相关产品推荐

