打开 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
InputMethodManager
class是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" 我已经能够更轻松地找到答案。祝你好运!
我正在使用 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
InputMethodManager
class是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" 我已经能够更轻松地找到答案。祝你好运!