打开 Xamarin/Monogame 的屏幕键盘

Open On-Screen Keyboard for Xamarin/Monogame

我正在使用 Xamarin/Monogame 开发一款游戏,当他们点击我的输入控件时,我需要在移动设备上打开键盘。我知道当我使用模拟器和我的键盘时,我可以使用 Keyboard.GetState() 捕获输入,但真正的用户将拥有物理设备,我需要打开屏幕键盘让他们输入信息。我在任何描述此内容的文档中都没有看到任何内容,但很难相信我是第一个 运行 参与其中的人。我已浏览 Xamarin/Monogame's docs on input and I've read this Whosebug article。如果您需要更多信息来帮助解决此问题,请告诉我。在此先感谢您的帮助。

经过大量挖掘,我找到了解决方案。我将首先解释我是如何到达那里的: 我不再思考 "how do I display the on-screen keyboard in Mono?",而是开始思考 "how do you display the keyboard on an Android device?" 这让我想到了 this article,这是完美的; Xamarin 和 Android。以下是相关片段:

显示软输入(屏幕键盘)

var pView = game.Services.GetService<View>();
var inputMethodManager = Application.GetSystemService(Context.InputMethodService) as InputMethodManager;
inputMethodManager.ShowSoftInput(pView, ShowFlags.Forced);
inputMethodManager.ToggleSoftInput(ShowFlags.Forced, HideSoftInputFlags.ImplicitOnly);

关于此的一些关键说明:

  • View class 是 Android.Views.View
  • InputMethodManagerclass是Android.Views.InputMethods.InputMethodManager
  • 此代码是从 Activity class 中调用的,因此 Application 指的是 class 上的 属性(this.Application )
  • game 是您的游戏 class(单声道),类型为 Microsoft.Xna.Framework.Game

隐藏软输入(屏幕键盘)

InputMethodManager inputMethodManager = Application.GetSystemService(Context.InputMethodService) as InputMethodManager;
inputMethodManager.HideSoftInputFromWindow(pView.WindowToken, HideSoftInputFlags.None);

在我解决这个问题之后,我捕获输入的方式(XNA/Mono 方式)并没有捕获这个输入。所以我不得不继续挖掘。虽然它不一定与这个问题有关,但我想在这里 post 它以便它存在于某个地方。 Android Developers site 上的这份文档帮助了我。

要直接捕获输入(这是我们需要做的以捕获到 OSK 输入),您需要覆盖 activity 上的 OnKeyPress 方法,您的游戏是 运行在。对我来说,这看起来如下:

public class AndroidActivity : AndroidGameActivity
{
    private void OnKeyPress(object sender, View.KeyEventArgs e)
    {
        // do stuff with the input
    }
}

希望这对遇到此问题的其他人有所帮助;信息很难找到,但现在我改变了思路 "how does Android/iOS handle this thing" 我已经能够更轻松地找到答案。祝你好运!