Это потому, что вы возвращаете false из метода onKeyUp, в android именно операции обрабатываются после метода onKeyUp.
Кроме того, вместо использования KeyListener, большинство действий имеют метод onKeyUp, который вы можете переопределить.
Вот пример кода, над которым я работал.
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_TAB) editText1.tab();
if(event.isCtrlPressed())
{
if(keyCode == KeyEvent.KEYCODE_O) // ctrl+o
{
onClick(open);
}
else if(keyCode == KeyEvent.KEYCODE_N) // ctrl+n
{
addFileTab(null); // add untitled tab
editText1.setText("");
}
else if(keyCode == KeyEvent.KEYCODE_A) // ctrl+a
{
editText1.selectAll();
}
else if(keyCode == KeyEvent.KEYCODE_S) // ctrl+s
{
onClick(save);
}
else if(keyCode == KeyEvent.KEYCODE_C) // ctrl+c
{
String selected = editText1.selection();
ClipData clip;
if(current != null)
clip = ClipData.newPlainText(current.getName() + " selection", selected);
else
clip = ClipData.newPlainText("Cerulean selection", selected);
clipMan.setPrimaryClip(clip);
}
else if(keyCode == KeyEvent.KEYCODE_P && clipMan.hasPrimaryClip()) // ctrl+p
{
if(clipMan.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN))
{
CharSequence clip = clipMan.getPrimaryClip().getItemAt(0).coerceToText(getBaseContext());
editText1.insert(clip.toString());
}
}
return false;
}
if(keyCode == KeyEvent.KEYCODE_SPACE || keyCode == KeyEvent.KEYCODE_ENTER)
{
onTabClicked(current, curTab);
}
return super.onKeyUp(keyCode, event);
}
Я называю суперклассы onKeyUp для всего остального. Надеюсь, это кому-нибудь поможет.
-c
ОБНОВЛЕНИЕ: Это обрабатывает только аппаратные клавиатуры, для других операций используйте TextWatcher.