Android: как получить любое событие KeyPress с примером? - PullRequest
13 голосов
/ 13 ноября 2010

Я хочу получить значение ключа, когда пользователь нажал любую клавишу, а также выполнить действие, основанное на клавише, нажатой в Android.

Например, если пользователь нажал клавишу «А», то я хочу получить это значение, сравнить, сделай что-нибудь.

Ответы [ 3 ]

20 голосов
/ 13 ноября 2010

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

1.) Если клавиша была результатом нажатия на программную клавиатуру, которое было получено длительным нажатием на клавишу Меню:

Вам необходимо тщательно переопределить следующую функцию:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
        case KeyEvent.KEYCODE_A:
        {
            //your Action code
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}

2.) Если ваше действие содержит EditText, и из него была получена программная клавиша, тогда первый подход не работает, поскольку ключевое событие уже было использованоРедактировать текст.Вам нужно использовать текст измененного слушателя:

mMyEditText.addTextChangedListener(new TextWatcher()
{
    public void afterTextChanged(Editable s) 
    {
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after) 
    {
        /*This method is called to notify you that, within s, the count characters beginning at start are about to be replaced by new text with length after. It is an error to attempt to make changes to s from this callback.*/ 
    }
    public void onTextChanged(CharSequence s, int start, int before, int count) 
    {
    }
);
6 голосов
/ 21 марта 2013

Код Zelimir работает, если ваша версия ssoo до 2.3 Если у вас есть этот код, работающий в 2.3, он не будет работать вообще, способ управления ключами событий во всех версиях ssoo - с dispatchKeyEvent ()

@Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        Log.d("hello", String.valueOf(event.getKeyCode()));
        return super.dispatchKeyEvent(event);
    }

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

3 голосов
/ 05 июня 2016

Попробуйте, это прекрасно работает.

@Override
public boolean onKeyUp (int keyCode, KeyEvent event){
char c = (char) event.getUnicodeChar();
//Do something....
return super.onKeyUp(keyCode, event);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...