Android - получать мягкие нажатия клавиш клавиатуры
Я пытаюсь нажать клавишу на программной клавиатуре, но не могу этого сделать. В настоящее время я использую следующий код
@Override
public boolean dispatchKeyEvent(KeyEvent KEvent)
{
int keyaction = KEvent.getAction();
if(keyaction == KeyEvent.ACTION_DOWN)
{
int keycode = KEvent.getKeyCode();
int keyunicode = KEvent.getUnicodeChar(KEvent.getMetaState() );
char character = (char) keyunicode;
System.out.println("DEBUG MESSAGE KEY=" + character + " KEYCODE=" + keycode);
}
return super.dispatchKeyEvent(KEvent);
}
Он ловит ключевые события для аппаратной клавиатуры, но не для виртуальной. Кто-нибудь может мне помочь
2 ответа
С официальной страницы Android
Примечание. При обработке событий клавиатуры с помощью класса KeyEvent и связанных API-интерфейсов следует ожидать, что такие события клавиатуры происходят только с аппаратной клавиатуры. Вы никогда не должны полагаться на получение событий клавиш для любой клавиши на программном методе ввода (экранная клавиатура).
Поэтому вы должны использовать интерфейс TextWatcher для наблюдения за символами, нажимаемыми на SoftKeyboard, например:
myEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
Это должно быть вашим решением:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 1) {
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}