Начать операцию, когда нажата клавиша

Я хочу начать работу, когда пользователь нажимает пробел. Мой код не обнаруживает, когда нажимается пробел.

@Override public boolean dispatchKeyEvent(KeyEvent e) { if (e.getKeyCode() == KeyEvent.KEYCODE_SPACE) { Toast.makeText(MainActivity.this, "YOU CLICKED SPACE KEY", Toast.LENGTH_LONG).show(); return true; } Toast.makeText(MainActivity.this, "Didnt work", Toast.LENGTH_SHORT) .show(); return super.dispatchKeyEvent(e); }; 

}

Solutions Collecting From Web of "Начать операцию, когда нажата клавиша"

Вы можете либо установить прослушиватель в представление, которое имеет текущую фокусировку , либо использовать dispatchKeyEvent в вашей Activity , как видно из этого ответа .

Оба будут работать.


Ответьте на ваши комментарии: если вы следовали за моей ссылкой, вы, вероятно, уже реализовали Activity.dispatchKeyEvent(KeyEvent) . 🙂

Код не регистрирует любую кнопку, которую я нажимаю, но когда я нажимаю клавишу «Назад», тосты для меня «не работают»,

Вы случайно используете эмулятор? Я прошу, потому что у последнего SDK, похоже, есть некоторые проблемы с клавиатурой эмулятора. Специальные клавиши (DPAD, HOME, BACK и т. Д.) Работают, но экранная клавиатура QWERTY не регистрирует никаких нажатий. Физическая клавиатура в моем ноутбуке также не регистрирует никаких нажатий.

Не спрашивай меня, почему.

И я говорю, что, поскольку на этой неделе я опубликовал ответ в ссылке, и он работал нормально. Изменение заключается в том, что я обновил Android SDK до R20 / JB этим утром, поэтому, я думаю, это может быть фактором.

Тем не менее, он будет работать только на реальном устройстве . Я только что подключил физическую клавиатуру к моему планшету (P7510 / Honeycomb 3.2), и он прислушивается к простому нажатию.

В случае, если вы все еще сомневаетесь, вот доказательство: 🙂

Введите описание изображения здесь

 public abstract boolean onKey (View v, int keyCode, KeyEvent event) 

Эта функция может использоваться для проверки того, какая клавиша нажата.

Для этого случая, что я сделал, я использовал переопределенную функцию 'onKey'

 @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode == nNeededKeyCode) { //do something } return true; } 

Ps во-первых, вам нужно использовать «OnKeyListener ()», чтобы получить событие нажатия клавиши

Извините за ответ «копировать / вставить», но это должно выполнить то, что вы пытаетесь сделать.

Это произойдет, когда пользователь нажимает «пробел», а затем пробегает пробел. Если вы не хотите ждать, пока они их отпустят, вы можете удалить мои логические значения и выполнить свой код в функции onKeyDown. Надеюсь это поможет.

 boolean spacePressed = false; @Override public boolean onKeyDown(View arg0, Editable arg1, int arg2, KeyEvent arg3) { // TODO Auto-generated method stub switch (keyCode) { case KeyEvent.KEYCODE_SPACE: { spacePressed = true; return true; } // other cases can go here } return true; }// End of onKeyDown @Override public boolean onKeyUp(View arg0, Editable arg1, int arg2, KeyEvent arg3) { if (spacePressed){ // start intent // make this false again, so other keys won't trigger it spacePressed = false; } return true; }// End of onKeyUp