示例:
public class MyActivity extends Activity { @Override public boolean dispatchKeyEvent(KeyEvent event) { // 检查是否按下了回退键(通常是物理按键或者是导航键) if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { // 检查事件类型 if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) { // 按下回退键并且没有重复 // 在这里执行你想要的操作 // 返回true表示事件被处理了 return true; } } // 如果不是回退键或者不处理该事件,则调用父类的方法继续分发 return super.dispatchKeyEvent(event); } }
在这个例子中,当检测到按下物理或者导航键“Back”时,会执行一些自定义的操作。如果是其他键的事件,则会继续传递给父类处理。
记住,如果你重写了dispatchKeyEvent,你需要负责分发给子视图的事件,否则子视图可能就无法接收到这些按键事件了。这通常通过调用super.dispatchKeyEvent(event)来实现。
通过重写dispatchKeyEvent()方法,可以实现对按键事件的自定义处理,并决定是否消费该事件。在处理完事件后,可以使用return true来表示消费事件,不再传递给其他组件处理;使用return super.dispatchKeyEvent(event)来继续传递事件给父组件处理。
处理换行符
@Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { String key = String.valueOf((char) event.getUnicodeChar()); if (key.equals("\n")) { return true; } // 处理按键事件 return true; } return super.dispatchKeyEvent(event); }