了解您的要求后,我发现
onKeyDown
和
onKeyUp
正在处理
Nexus 5 API 25
emulator但是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()
在emulator上也可以正常工作。我正在使用以下代码:
//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 emulator