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