【问题标题】:Open On-Screen Keyboard for Xamarin/Monogame为 Xamarin/Monogame 打开屏幕键盘
【发布时间】:2016-12-13 02:31:05
【问题描述】:

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

【问题讨论】:

  • 你好,我也偶然发现了这个,找不到任何信息。下面的解决方案看起来仅适用于 Android。 Monogame 中是否没有适用于 iOS 和 Android 的打包解决方案?

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


【解决方案1】:

经过大量挖掘,我能够找出解决方案。我将首先解释我是如何到达那里的: 我不再想“如何在 Mono 中显示屏幕键盘?”并开始思考“如何在 Android 设备上显示键盘?”这让我找到了this article,这是完美的; Xamarin 和安卓。这是相关的sn-ps:

显示软输入(屏幕键盘)

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 是您的游戏类(单声道),类型为 Microsoft.Xna.Framework.Game

隐藏软输入(屏幕键盘)

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

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

要直接捕获输入(这是我们需要执行的捕获到 OSK 输入的操作),您需要在运行游戏的 Activity 上覆盖 OnKeyPress 方法。对我来说,如下所示:

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

希望这可以帮助其他陷入此困境的人;这些信息很难找到,但现在我已经改变了我的想法,“Android/iOS 如何处理这件事”,我能够更轻松地找到答案。祝你好运!

【讨论】:

  • 在 MonoGame 3.7 中,我必须订阅我的 ViewKeyPress 事件才能使其正常工作。 MainGame g = new MainGame(); var v = (View)g.Services.GetService(typeof(View)); v.KeyPress += OnKeyPress;
  • 我用这个方法,效果很好……除了一些手机。在某些手机上,退格键不起作用,您必须按住它才能使其起作用。在其他手机上,您必须双击每个键,而其他手机则什么也不做。有什么解决方案吗?这是单人游戏问题还是软键盘输入问题?
猜你喜欢
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 2012-08-14
  • 2015-05-31
  • 1970-01-01
  • 2014-01-20
  • 2011-12-16
  • 1970-01-01
相关资源
最近更新 更多