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

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

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

【问题讨论】:

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

标签: xamarin.forms keyboard 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 功能的区域??
猜你喜欢
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 2018-12-22
  • 2019-04-28
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
  • 2011-11-18
相关资源
最近更新 更多