2016-08-07 4 views
3

Я разрабатываю игру с использованием Xamarin/Monogame, и мне нужно открыть клавиатуру на мобильном устройстве, когда они нажмут на мой входной контроль. Я понимаю, что я могу записывать ввод с использованием Keyboard.GetState(), когда я использую эмулятор и клавиатуру, но у реальных пользователей будут физические устройства, и мне нужно открыть экранную клавиатуру, чтобы они могли вводить информацию. Я ничего не вижу в любой документации, описывающей это, но мне трудно поверить, что я первый человек столкнулся с этим. Я просмотрел Xamarin/Monogame's docs on input, и я прочитал this StackOverflow article. Дайте мне знать, если вам нужна дополнительная информация, чтобы помочь решить эту проблему. Заранее благодарю за любую помощь.Открытая экранная клавиатура для Xamarin/Monogame

ответ

4

После долгих поисков я смог найти решение. Сначала я объясню, как я туда попал: Я перестал думать: «Как отобразить экранную клавиатуру в 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
  • Этот c ода называется изнутри Activity класса, так Application относится к свойству по этому классу (this.Application)
  • game Ваш игровой класс (в моно), который имеет тип Microsoft.Xna.Framework.Game

Скрытие мягкий вход (экранной клавиатура)

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

После того как я решил это, как я был захват входного потока (XNA/моно путь) был не захватывая этот вход. Поэтому мне пришлось продолжать рыть. Хотя это не обязательно относится к этому вопросу, я бы хотел опубликовать его здесь, чтобы он где-то существовал. Эта документация на Android Developers site помогла мне.

Чтобы захватить ввод непосредственно (который является то, что нам нужно сделать, чтобы захватить для ввода OSK), вам необходимо переопределить OnKeyPress метод на активности ваша игра работает в Для меня, это выглядит следующим образом:.

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

Надеюсь, это поможет любому, кто застрял в этом; информацию было трудно найти, но теперь, когда я изменил свое настроение на «как Android/iOS справляется с этой задачей», я смог легче найти ответы. Удачи!

Смежные вопросы