2014-05-12 178 views
3

我想顯示MenuActionBar使用ActionBarActivity選項菜單不顯示在ActionBar

我正在獲取選項菜單,而單擊選項按鈕而不是顯示在操作欄的頂部。

我需要的選項菜單在頂部,而不是點擊選項菜單從2.3起

Here is the image

我的代碼:

public class MainActivity extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ActionBar actionBar = getSupportActionBar(); 
    actionBar.setSubtitle("mytest"); 
    actionBar.setTitle("Testing"); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment()).commit(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main_action, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.menu_item_one: 
     Toast.makeText(this, "clicked search", Toast.LENGTH_SHORT).show(); 
     break; 

    default: 
     break; 
    } 
    return super.onOptionsItemSelected(item); 
} 

/** 
* A placeholder fragment containing a simple view. 
*/ 
public static class PlaceholderFragment extends Fragment { 

    public PlaceholderFragment() {} 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
     return rootView; 
    } 
} 

} 

我的XML文件:

+0

顯示您的xml菜單。 – Suvitruf

+0

@Suvitruf我更新了我的問題 –

+0

我用了ActionBarSherlock,所以沒有這個問題) – Suvitruf

回答

0

我不是100%肯定的,但它看起來像你的菜單XML文件應該有一個菜單在裏面。在菜單中,添加項目。像這樣:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/main_menu" > 

    <item... 

    <item... 

</menu> 

也許這工作。

還有其他一些事情要記住一般。 Android自行決定在ActionBar中顯示哪些內容(取決於適合的內容和其他參數)。什麼不適合在ActionBar進入溢出。

+0

如果您點擊編輯我的問題,您可以看到這些行 –

+0

不幸的是,發佈問題後,這些不可見 –

0

爲此在您的OnCreate()

ActionBar actionBar = getActionBar(); 
actionBar.show(); 

這應該做你想要什麼。 Action Bar

+0

我需要'getSupportActionBar();'支持所有設備 –

+0

然後只需將actionbar.show();在初始化它之後。 – JCodes13

+0

試過但沒有成功 –

1

嘗試用return super.onCreateOptionsMenu(menu);而不是return trueonCreateOptionsMenu方法根據下面的Android文件...

http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems

按照上面的android文件...

的動作條的API是第一添加到Android 3.0(API級別11)中,但它們也可以在支持庫中獲得,以兼容Android 2.1(API級別7)及更高版本。 所以,如果你想在Android 2.3的ActionBar,那麼你必須使用Android支持庫

編輯:

你的菜單XML需要是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<menu 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:yourapp="http://schemas.android.com/apk/res-auto" 
> 

<item android:id="@+id/item_menu_ok" 
android:icon="@drawable/ic_action_ok" 
android:title="@string/ok" 
yourapp:showAsAction="always"/> 

<item android:id="@+id/item_menu_cancel" 
android:icon="@drawable/ic_action_cancel" 
android:title="@string/cancel" 
yourapp:showAsAction="always"/> 

</menu> 

更換yourapp與您的應用程序的名稱或任何命名空間。

+0

是啊!我試着用'return super.onCreateOptionsMenu(menu);'但沒有結果。我添加了圖書館,並完成了所有內容 –

+0

看到我編輯的答案創建菜單XML文件與Android支持庫。 –

+0

如果你點擊編輯問題,你可以看到我保存的菜單標題。我猜它不是'yourapp'它的'app' in android:app' –

1

試試:

的 「../res/menu/menu_main.xml」

manu_main創建XML文件。XML

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item 
     android:id="@+id/menu_settings" 
     android:showAsAction="never" 
     android:icon="@android:drawable/ic_menu_settings" 
     android:title="@string/menu_settings"/> 

</menu> 

的「showAsAction」選項「從不」,重要的是,如果你把該選項始終顯示在動作條。

然後現在我們必須在MainActivity.java(任何你想要的類)上選擇這個選項。

MainActivity.java

public class MainActivity extends Activity { 

    ... 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 

現在,我們定義動作條的內容是知道如何通過關於它們的用戶做出響應按鍵。

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 

     case R.id.menu_settings: 
      Log.i("ActionBar", "Settings!");; 
      //open Activity,Fragments or other action 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

如果你有你的菜單上得越多選項只對XML menu_main.xml添加項目,並於主類中添加其他的「案例」。

例如:

MainActivity.java

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 

     case R.id.menu_save: 
      Log.i("ActionBar", "Save!");; 
      //open Activity,Fragments or other action 
      return true; 
     case R.id.menu_settings: 
      Log.i("ActionBar", "Settings!");; 
      //open Activity,Fragments or other action 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

menu_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

     <item 
      android:id="@+id/menu_settings" 
      android:showAsAction="never" 
      android:icon="@android:drawable/ic_menu_settings" 
      android:title="@string/menu_settings"/> 

     <item 
      android:id="@+id/menu_save" 
      android:showAsAction="never" 
      android:icon="@android:drawable/ic_menu_save" 
      android:title="@string/menu_save"/> 

    </menu> 
+0

這裏唯一的變化是擴展'ActionBarActivity'而不是'Activity' –

+0

是的,改變這一點,並說我。 – Aspicas

0

好吧,讓我們嘗試另一種答案。 如果,無論出於何種原因,Android決定不在操作欄中顯示這些項目,那麼您所看到的確實是正確的行爲。不在操作欄中的項目在溢出中顯示。

項目不顯示在操作欄中的原因之一是因爲它們沒有定義圖標。

你做定義的圖標,因爲這樣,

android:icon="@drawable/ic_launcher" 

,我懷疑這就是問題所在。啓動器圖標與動作欄項目(較小)大小不同(較大)。嘗試以正確的大小定義圖標並查看它是否顯示。

http://developer.android.com/design/style/iconography.html

編輯:有一個動作欄圖標包,讓你開始,所以你可以測試一下,看看它是否工作。下載它並使用eclipse導入一些圖標..

+0

我是否需要在manifest文件中聲明它。它已經存在於清單文件 –

+0

嗯?我認爲問題在於圖標ic_launcher.png的大小不正確。嘗試添加正確大小的圖標。 –