#java #android
#java #Android
Вопрос:
Привет, ребята, я недавно работал с Android, и до сих пор все было в порядке.
Когда я хочу обработать событие нажатия клавиши, я просто переопределяю метод onKeyDown в своей деятельности. То же самое с событием key up.
Проблема в том, что это работает только для одной клавиши, если я одновременно нажимаю на клавиши, только один из них является дескриптором.
Например:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
boolean returnValue = super.onKeyDown(keyCode, event);
switch(keyCode){
case KeyEvent.KEYCODE_A:
//Do something awesome here
return true;
case KeyEvent.KEYCODE_C:
//Do something even more awesome here
return true;
}
return returnValue;
}
Если я нажимаю «A» и «C» одновременно, один из них обрабатывается первым.
Моя первая идея состояла в том, чтобы установить флаги с помощью события onKeyDown, чтобы отслеживать, какие клавиши нажаты, и снять флаги с помощью события onKeyUp, но это не удалось при переключении между действиями.
Теперь то, что я хочу, это что-то вроде следующего:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
boolean returnValue = super.onKeyDown(keyCode, event);
switch(keyCode){
case KeyEvent.KEYCODE_A:
if(/* C is pressed */){
//Do something not so awesome here
}
else{
//Do something awesome here
}
return true;
case KeyEvent.KEYCODE_C:
if(/* A is pressed */){
//Do something not so awesome here
}
else{
//Do something even more awesome here
}
return true;
}
return returnValue;
}
Ответ №1:
Проблема в том, что это работает только для одной клавиши, если я одновременно нажимаю на клавиши, только один из них является дескриптором.
Это связано с тем, что Android не поддерживает одновременное нажатие нескольких клавиш, за исключением стандартных «мета» клавиш (например, shift).
Комментарии:
1. Я написал тестовое приложение, смешал кучу клавиш и получил все соответствующие события нажатия / нажатия клавиш, даже в разных действиях. Итак, я не уверен, что именно вы подразумеваете под «Android не поддерживает несколько одновременных нажатий клавиш».
2. @Jason LeBrun: я имею в виду, что несколько одновременных нажатий клавиш не сообщаются как одно
KeyEvent
, что, по-видимому, и было тем, что искал OP.
Ответ №2:
Обнаружение нескольких нажатий клавиш часто обусловлено ограничениями оборудования. Многие клавиатуры разработаны с использованием матричного подхода, так что не всегда возможно однозначно определить нажатые клавиши.
Если вы используете устройство, которое распознает несколько нажатий клавиш, вы можете попробовать сохранить свои флаги нажатия клавиш в статической области или в объекте, который вы можете передавать между действиями.
Но имейте в виду, что в конечном счете эффективность вашего решения будет ограничена реализацией аппаратной клавиатуры.