【问题标题】:Inflate ActionBarSherlock Menu's defined in XML在 XML 中定义的膨胀 ActionBarSherlock 菜单
【发布时间】:2012-07-30 07:47:46
【问题描述】:

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

在 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 上的示例,但所有示例都在代码中定义了菜单。

那么,有没有人设法让 actionbarsherlock 菜单与基于 XML 文件的布局一起使用?

【问题讨论】:

    标签: android menu android-actionbar actionbarsherlock backwards-compatibility


    【解决方案1】:

    试试这个

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

    【讨论】:

    • com.actionbarsherlock.view.Menu 我将在哪里获得这门课.. 这是我的问题链接stackoverflow.com/questions/12779308/how-to-use-menu-in-layout。我可以在我的项目中使用上面的示例吗?
    • 你们能用 Robolectric 测试一下吗?看起来它无法从资源中扩充我的菜单,发出 Resources$NotFoundException。
    【解决方案2】:

    我自己也遇到了这个问题。

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多