Xamarin Forms - 防止键盘在 UWP、Android、iOS 中的条目焦点上显示

Posted

技术标签:

【中文标题】Xamarin Forms - 防止键盘在 UWP、Android、iOS 中的条目焦点上显示【英文标题】:Xamarin Forms - Prevent Keyboard from Showing on Entry Focus in UWP, Android, iOS 【发布时间】:2019-04-25 14:59:29 【问题描述】:

在 Xamarin.Forms 中,我可以通过创建自定义渲染器并使用适用于 android 的 ShowSoftInputOnFocus 和适用于 ios 的 InputView 来防止在 Entry 视图获得焦点时弹出键盘。

但是我可以在 UWP 中使用什么来防止它发生?

【问题讨论】:

嗨@cd491415,您有没有找到任何解决方案来防止软键盘在 xamarin 表单 uwp 的输入焦点上弹出? 【参考方案1】:

当Entry视图获得焦点时防止键盘弹出

UWP 有直接的 API 支持来隐藏和显示 InputPane。您可以调用TryHide 方法来隐藏键盘。对于 xamarin,您可以使用 DependencyService 来接近。更多内容请参考以下代码。

界面

public interface IKeyboard

    void HideKeyboard();
    void ShowKeyboard();
    void RegisterAction(Action<object, KeyboardState> callback);

public enum KeyboardState

    Hide,
    Show

KeyboardImplementation.cs

public class KeyboardImplementation : IKeyboard

    private InputPane _inputPane;
    private Action<object, KeyboardState> action;

    public KeyboardImplementation()
    
        _inputPane = InputPane.GetForCurrentView();
        _inputPane.Showing += OnInputPaneShowing;
        _inputPane.Hiding += OnInputPaneHiding;
    
    public void HideKeyboard()
    
        _inputPane.TryHide();
    
    public void ShowKeyboard()
    
        _inputPane.TryShow();
    
    public void RegisterAction(Action<object, KeyboardState> callback)
    
        action = callback;
    

    private void OnInputPaneHiding(InputPane sender, InputPaneVisibilityEventArgs args)
    
        action(this, KeyboardState.Hide);
    

    private void OnInputPaneShowing(InputPane sender, InputPaneVisibilityEventArgs args)
    
        action(this, KeyboardState.Show);
    

用法

DependencyService.Get<IKeyboard>().RegisterAction((s,e)=> 
    if (e == KeyboardState.Show)
    
        var keyboard = s as IKeyboard;
        keyboard.HideKeyboard();
    
);

【讨论】:

@NicoShu 感谢 Nico,但此解决方案将显示软键盘然后将其隐藏。我正在寻找一种解决方案,当 Entry 获得焦点时根本不显示键盘。我发现文章解释了如何使用自定义条目渲染器和适用于 Android 的 ShowSoftInputOnFocus 和 iOS 上的 InputView,但自定义渲染器执行相同操作,键盘仍会短暂显示,然后消失。您的建议也是如此,这使事情变得更糟,因为用户现在不断弹出键盘然后自行消失。 是的,这个解决方案只是用来隐藏键盘,它是全局设置。它可以灵活地在界面中制作取消订阅方法。 uwp 中还有另一种解决方案,请参考case reply。如果您认为可行,我可以帮助为 xamarin Entry 控件制作一个插件。 感谢@NicoShu,但我不是在寻找隐藏键盘的解决方案。一旦自定义条目获得焦点,我正在寻找 防止 键盘完全显示的解决方案。弹出键盘然后隐藏它会使情况变得更糟。 是的,我知道,但目前,xaml 控件没有这样的属性。如果您确实需要此功能,请随时将其发布到user voice。 您提供的链接根本没有请求 Xamarin Forms 功能的区域??

以上是关于Xamarin Forms - 防止键盘在 UWP、Android、iOS 中的条目焦点上显示的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Xamarin Forms 更改键盘的习惯用法

Xamarin.Forms.Picker 内容在 UWP 中重复

Xamarin.Forms UWP UI 测试

Xamarin.Forms (UWP) - 如何获取 WebView 的 DOM 作为 HTML 字符串?

使用 PlatformConfiguration (Xamarin.Forms 2.3.3) 在 UWP 中将工具栏移动到底部

Xamarin.Forms 热重载在 UWP 中不起作用