首页 > 解决方案 > Xamarin Forms - 防止键盘在 UWP、Android、iOS 中的条目焦点上显示

问题描述

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

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

标签: xamarin.formskeyboardxamarin.uwp

解决方案


防止在条目视图获得焦点时弹出键盘

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

界面

public interface IKeyboard
{
    void HideKeyboard();
    void ShowKeyboard();
    void RegisterAction(Action<object, KeyboardState> callback);
}
public enum KeyboardState
{
    Hide,
    Show
}

键盘实现.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();
    }
});

推荐阅读