示例:
public class MyActivity extends Activity { @Override public boolean dispatchKeyEvent(KeyEvent event) { // 檢查是否按下了回退鍵(通常是物理按鍵或者是導(dǎo)航鍵) if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { // 檢查事件類型 if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) { // 按下回退鍵并且沒有重復(fù) // 在這里執(zhí)行你想要的操作 // 返回true表示事件被處理了 return true; } } // 如果不是回退鍵或者不處理該事件,則調(diào)用父類的方法繼續(xù)分發(fā),返回false效果一樣。 return super.dispatchKeyEvent(event); } }
在這個例子中,當(dāng)檢測到按下物理或者導(dǎo)航鍵“Back”時,會執(zhí)行一些自定義的操作。如果是其他鍵的事件,則會繼續(xù)傳遞給父類處理。
記住,如果你重寫了dispatchKeyEvent,你需要負(fù)責(zé)分發(fā)給子視圖的事件,否則子視圖可能就無法接收到這些按鍵事件了。這通常通過調(diào)用super.dispatchKeyEvent(event)來實現(xiàn)。
通過重寫dispatchKeyEvent()方法,可以實現(xiàn)對按鍵事件的自定義處理,并決定是否消費該事件。在處理完事件后,可以使用return true來表示消費事件,不再傳遞給其他組件處理;
使用return super.dispatchKeyEvent(event);或者return false;來繼續(xù)傳遞事件給父組件處理。
處理換行符
@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); }
浙公網(wǎng)安備 33010602011771號