Что касается ввода с экранной клавиатуры Android

Я следовал этому примеру (Открыть экранную клавиатуру для Xamarin/Monogame) для подключения SoftInput к моему Android-приложению Xamarin MonoGame. У меня проблема с перехватом событий OnKeyPress. Поскольку на плакате он указан там, мне просто нужна приватная пустота OnKeyPress без тега переопределения, но мне это кажется неправильным, и на практике это не работает. Я могу заставить OSK появляться и исчезать в нужное время, но я не улавливаю события OnKeyPress. То, как он описывает это там, не верно? (Я бы просто прокомментировал вопрос и спросил это, но я не могу оставлять комментарии из-за этой глупой системы репутации, которая заставляет меня задавать кучу вопросов, прежде чем я смогу ответить на вопросы.)

Код для события OnKeyPress, созданный по его примеру:

private void OnKeyPress(object sender, KeyEventArgs e)
{
    //does stuff
}

Разве это не должно быть защищенным переопределением? Но я не могу найти подходящий метод в Android.Activity для переопределения. Что-то я тут заблудился, помогите пожалуйста :(


person Taien    schedule 04.12.2016    source источник
comment
Предполагая, что вы пытаетесь зафиксировать нажатия клавиш, которые НЕ захвачены никакими другими представлениями, переопределите Activity.OnKeyDown. Если вы пытаетесь захватить TextView нажатия клавиш, реализуйте ITextWatcher и добавьте его к вашему TextView через AddTextChangedListener. Что касается связанного SO, я не понимаю, как OnKeyPress когда-либо будет что-либо делать, поскольку он не запускается ни от чего в этом ответе SO, а AndroidGameActivity является подклассом «Activity», и эта игровая активность также не имеет метода OnKeyPress...   -  person SushiHangover    schedule 04.12.2016
comment
Методы представления на самом деле не используются слишком часто, поскольку это приложение MonoGame, поэтому я в основном обрабатываю ввод из TouchCollection в каждом кадре и не использую никаких стандартных элементов управления Android. У меня есть собственный класс для текстового поля, которое я сделал, и это то, что я пытаюсь отправить на ввод. Я попробую ваше предложение с альтернативным событием, спасибо.   -  person Taien    schedule 04.12.2016
comment
В этом случае похоже, что вам просто нужно переопределить Activity.OnKeyDown (или, возможно, OnKeyUp в зависимости от ваших потребностей): developer.android.com/training/keyboard-input/commands.html   -  person SushiHangover    schedule 04.12.2016
comment
Я попытался переопределить OnKeyDown, как вы упомянули, но он по-прежнему не получает события, когда я касаюсь клавиш на OSK. Вот как я настроил метод: public override bool OnKeyDown(Keycode keyCode, KeyEvent e) { }   -  person Taien    schedule 05.12.2016