7

应该足够简单,但可能不是。

在 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>

现在,我面临着使 actionbar 向后兼容的问题,而 actionbarsherlock 似乎是最令人愉快的使用和流行的。所以我用 actionbarsherlock 尝试了上述方法,遗憾的是存在编译时问题。

也就是说,inflater 返回的 Menu 类来自“Android.view.menu”,而不是“com.actionbarsherlock.menu”。我浏览了 github 上的示例,但所有示例都在代码中定义了菜单。

那么有没有人设法获得一个使用基于 XML 文件的布局的 actionbarsherlock 菜单?

4

2 回答 2

23

试试这个

    @Override
    public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
        getSupportMenuInflater().inflate(R.menu.your_menu, menu);
        return true;
}
于 2012-08-01T12:28:46.210 回答
5

我自己刚遇到这个问题。

你想要做的是调用getSupportMenuInflater()而不是getMenuInflater()像这样:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
于 2012-11-18T00:53:18.283 回答