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; 
}