为Xamarin / Monogame打开屏幕键盘

时间:2016-08-07 01:45:06

标签: c# android xamarin monogame on-screen-keyboard

我正在使用Xamarin / Monogame开发游戏,我需要在点击我的输入控件时在移动设备上打开键盘。我知道当我使用模拟器和键盘时,我可以使用Keyboard.GetState()捕获输入,但真正的用户将拥有物理设备,我需要打开屏幕键盘才能输入信息。我没有在任何文档中看到任何描述这一点的内容,但我很难相信我是第一个遇到此问题的人。我已查看了Xamarin/Monogame's docs on input,并且我已阅读this StackOverflow article。如果您需要更多信息来帮助我解决此问题,请与我们联系。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

经过多次挖掘,我能够找到解决方案。我首先解释一下我是如何到达那里的: 我停止思考"如何在Mono中显示屏幕键盘?"并开始思考"如何在Android设备上显示键盘?"这导致我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班级为Android.Views.View
  • InputMethodManager班级为Android.Views.InputMethods.InputMethodManager
  • 此代码是在Activity类中调用的,因此Application引用该类的属性(this.Application
  • game是您的游戏类(在Mono中),类型为Microsoft.Xna.Framework.Game

隐藏软输入(屏幕键盘)

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

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

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

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

希望这有助于其他任何坚持这一点的人;信息很难找到,但现在我已经改变了我的思维方式,以及#34; Android / iOS如何处理这个问题&#34;我能够更轻松地找到答案。祝你好运!