7

應該很簡單,但可能不夠。充氣ActionBarSherlock菜單中定義的XML

在Android 3.0+中使用操作欄時,您可以選擇使用XML或代碼定義菜單項。我更喜歡在xml中對它們進行編碼,因爲操作欄感覺更多基於UI的功能。

平均每天,你會用它來將XML膨脹成一個菜單

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    // Menu is defined inside 'res/menu/...xml 
    getMenuInflater().inflate(R.menu.activity_home, menu); 
    return true; 
} 

而且你的XML文件看起來像這樣

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

    <item 
     android:id="@+id/menu_settings" 
     android:orderInCategory="100" 
     android:showAsAction="never" 
     android:title="@string/menu_settings"/> 
    <item 
     android:id="@+id/menu_item_menu" 
     android:icon="@drawable/menu_off_128" 
     android:showAsAction="ifRoom|withText" 
     android:title="@string/inbox_string"/> 
    <item 
     android:id="@+id/menu_item_gallery" 
     android:icon="@drawable/gallery_off_128" 
     android:showAsAction="ifRoom|withText" 
     android:title="@string/gallery_string"/> 
    <item 
     android:id="@+id/menu_item_inbox" 
     android:icon="@drawable/inbox_off_128" 
     android:showAsAction="ifRoom|withText" 
     android:title="@string/inbox_string"/> 
    <item 
     android:id="@+id/menu_item_contact" 
     android:icon="@drawable/phone_off_128" 
     android:showAsAction="ifRoom|withText" 
     android:title="@string/contact_string"/> 

</menu> 

現在,我面對使操作欄向後兼容的問題和操作欄鎖定似乎是最令人愉快的使用和流行。 所以我用actionbarsherlock嘗試了上面的內容,遺憾的是編譯時間問題。

即,inflater返回的Menu類是從'Android.view.menu'而不是'com.actionbarsherlock.menu'。我在github上挖掘了樣本,但他們都有代碼中定義的菜單。

那麼,有任何人得到一個actionbarsherlock菜單使用基於XML文件的佈局?

回答

23

試試這個

@Override 
    public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) { 
     getSupportMenuInflater().inflate(R.menu.your_menu, menu); 
     return true; 
} 
+0

com.actionbarsherlock.view.Menu在那裏我會得到這個類..這裏是我的鏈接http://stackoverflow.com/questions/12779308/how-to-use-menu-in-layout的問題。我可以使用這個上面的例子來我的項目。 – 2012-10-08 11:47:33

+0

你們是否可以通過任何機會與Robolectric進行測試?它看起來不能從資源中充氣我的菜單,並給出一個Resources $ NotFoundException。 – 2014-01-05 01:09:20

5

只是有這個問題我自己。

你想要做的是調用getSupportMenuInflater()代替getMenuInflater()像這樣:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getSupportMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
}