覆寫 `onKeyDown` 返回 `true` 想屏蔽 `KEYCODE_MENU`,但無效。更深層原因:ActionBar 的 Overflow 選單與實體 Menu 鍵選單不同步,導致新增項目顯示位置混亂。
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
// 選項 1:完全屏蔽,不讓選單彈出
return true; // 事件被消費,不再分發
// 選項 2:若想保留選單但同步 Overflow,這裡不攔截,改用下方同步策略
}
}
return super.dispatchKeyEvent(event);
}
`dispatchKeyEvent` 是視窗分發按鍵事件的入口,比 `onKeyDown` 更早攔截,成功率最高。
與其屏蔽 Menu 鍵,不如讓兩者共用同一選單資料源:
屏蔽 Menu 鍵請用 `dispatchKeyEvent` 返回 `true`。但**根治方案是遷移至 Toolbar 統一選單管理**,讓 Overflow 與實體 Menu 鍵共享同一 `Menu` 實例,徹底消除不同步問題。