22

我無法在使用android-support-v4.jar庫的項目中的ICS中的片段中顯示選項菜單。我正在測試Galaxy Nexus手機。在使用兼容性庫的ICS中未顯示選項菜單

我們不使用操作欄,需要應用程序爲2.2+兼容。我們在ICS活動中看不到任何選項菜單(FragmentActivity不支持onCreateOptionsMenu)

我可以在早期版本的Android中使用菜單 - 我擁有所有正確的框架來啓用選項菜單(如下面),但沒有在ICS中顯示。在單步執行代碼時,onCreateOptionsMenu不會被調用。任何人都可以提出修正?

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 

public class SuperFragment extends Fragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     setHasOptionsMenu(true); 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.display_options_actions, menu); 
     super.onCreateOptionsMenu(menu, inflater); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch(item.getItemId()) { 
      case R.id.menu_sign_in: 
       break; 
      case R.id.menu_sign_out: 
       break; 
     } 
     return true; 
    } 
    // ... 
} 

目標操作系統版本清單文件:

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="14"/> 
+0

查看您的進口列表將有所幫助;你是從框架使用支持庫碎片還是android.app.Fragment?您是否看到活動中的其他菜單項?您的活動是否使用操作欄?你的清單中的targetSdkVersion是什麼? – adamp

+0

感謝您的評論,我在我的問題中添加了一些細節 – Martyn

回答

32

刪除android:targetSdkVersion="14"從清單再次啓用選項菜單按鈕。

這是因爲我在我的清單中指定了@android:style/Theme.Black.NoTitleBar的主題 - android:targetSdkVersion爲14,選項菜單插入到操作欄菜單中,而不是按鈕欄中的選項菜單按鈕在屏幕的底部,主題是刪除活動標題和操作欄。

The action bar can be removed,雖然我不知道這是否會解決問題,因爲我還沒有得到它的工作,使其跨版本2.2的兼容 - 4

+4

關鍵不是TARGET 14,而是將其作爲maxSDK包含在內。通過這種方式,ICS試圖使舊菜單向前兼容,並且不期待一個ActionBar –

+4

其實關鍵是目標小於11.我們今天發現了這一點。頭痛嚴重!我們認爲不使用ActionBar主題會啓用兼容性菜單,顯然不是! –

+0

真是痛苦!這讓我現在與菜單。謝謝!這會使默認目標爲1.這可能會導致您的應用中可能使用的其他不兼容小部件出現問題。 – Ramp

2

根據Android的CDD,截止於不顯示選項菜單的新行爲是targetSdkVersion> 10.您的選擇是以傳統模式運行您的應用程序,使用targetSdkVersion < = 10或將您的應用程序改編爲新的指導方針(例如,在您的應用程序中添加菜單按鈕或使用行動欄)。請注意,您不必增加目標構建版本(eclipse中的項目屬性)來增加targetSdkVersion。

11

只需將android:targetSdkVersion從「14」更改爲「10」(小於11),即可解決此問題。

<uses-sdk android:minSdkVersion="3" 
     android:targetSdkVersion="10" />