2 или более нажатых одновременно клавиш

#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:

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

Если вы используете устройство, которое распознает несколько нажатий клавиш, вы можете попробовать сохранить свои флаги нажатия клавиш в статической области или в объекте, который вы можете передавать между действиями.

Но имейте в виду, что в конечном счете эффективность вашего решения будет ограничена реализацией аппаратной клавиатуры.