После понимания вашего требования я обнаружил, что onKeyDown
и onKeyUp
не работают на эмуляторе Nexus 5 API 25
, но TextWatcher может служить вашей цели, если вы действительно хотите использовать эмулятор Nexus 5 API 25
.
Вкл. Nexus 5X API 26
, onKeyDown
и onKeyUp
работают нормально. Конечно, TextWatcher
тоже работает.
Используйте TextWatcher , чтобы обнаружить изменения в тексте внутри EditText, и там вы можете проверить, какая клавиша нажата. Ниже работает код:
TextWatcher textWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count, int after){
if (after < count) {
Log.d("DELETE_KEY_PRESSED", "beforeTextChanged: ");
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.length()>0 && s.subSequence(s.length()-1, s.length()).toString().equalsIgnoreCase("\n")) {
Log.d("ENTER_KEY_PRESSED", "onTextChanged: ");
} else if (s.length() == 0) {
Log.d("DELETE_KEY_PRESSED", "onTextChanged: ");
}
}
@Override
public void afterTextChanged(Editable s) {
}
};
EditText editText = (EditText) findViewById(R.id.edit);
editText.addTextChangedListener(textWatcher);
Вы также можете использовать TextWatcher для обнаружения всех других нажатых клавиш.
Кстати, для меня onKeyDown () и onKeyUp () также отлично работают на эмуляторе. Я использую ниже код:
//To detect DELETE KEY PRESS event there is no text in EditText
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DEL) {
Log.d("KEY_PRESSED - onKeyDown", "KEYCODE_DEL");
}
return super.onKeyDown(keyCode, event);
}
//To detect DELETE KEY PRESS event there is no text in EditText
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DEL) {
Log.d("KEY_PRESSED - onKeyUp", "KEYCODE_DEL");
}
return super.onKeyUp(keyCode, event);
}
ПРИМЕЧАНИЕ. Я использую эмулятор Nexus 5X API 26