在 main.xml 定義選單資源,但 Activity 並未自動產生 onCreateOptionsMenu() 方法,選單圖示始終不出現。初學者常誤以為是 ADT 版本問題,實則是對選單生命週期理解不足。
Android 選單機制不會自動產生程式碼。開發者必須在 Activity 或 Fragment 中手動覆寫 onCreateOptionsMenu(Menu menu),並呼叫 getMenuInflater().inflate(R.menu.main, menu) 載入 XML 資源。
res/menu/main.xml<menu xmlns:android="https://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_settings"
android:title="@string/settings"
android:orderInCategory="100"
android:showAsAction="never" />
</menu>
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// 載入選單資源
getMenuInflater().inflate(R.menu.main, menu);
return true; // 必須回傳 true 才會顯示
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// 處理選單項目點擊
if (item.getItemId() == R.id.action_settings) {
startActivity(new Intent(this, SettingsActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true); // 關鍵:告訴系統此 Fragment 有選單
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_menu, menu);
}
onCreateOptionsMenu 回傳 truesetHasOptionsMenu(true)res/menu/)android:showAsAction 設定導致圖示隱藏在溢位選單Android Studio 可直接對著 res/menu/ 右鍵 → New → Menu resource 快速建立 XML,並在 Activity 中按 Ctrl+O 搜尋 onCreateOptionsMenu 自動產生覆寫框架。