Android 4.4 (KitKat) 起,系統導航欄預設隱藏傳統 Menu 鍵(三個點溢出選單),導致依賴 onCreateOptionsMenu 的舊版 App 在虛擬按鍵裝置上無法呼叫選單,如京東 App 截圖所示仍保留選單按鈕。
在 build.gradle 設定 targetSdkVersion 13 或更低。副作用:所有 Activity 皆強制顯示選單鍵,且失去新版 API 優化與安全特性。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
// 反射獲取隱藏常數
int flag = WindowManager.LayoutParams.class
.getField("FLAG_NEEDS_MENU_KEY").getInt(null);
getWindow().addFlags(flag);
} catch (Exception e) {
Log.w(TAG, "無法啟用傳統選單鍵", e);
}
}
FLAG_NEEDS_MENU_KEY 為隱藏 API,告訴 WindowManager 該視窗需要傳統選單鍵。建議遷移至 Toolbar + MenuItem.SHOW_AS_ACTION_ALWAYS 或 PopupMenu,完全掌控選單顯示邏輯,不依賴系統導航欄行為。