【问题标题】:android.support.v7 with `ActionBarActivity` no menu showsandroid.support.v7 与 `ActionBarActivity` 没有菜单显示
【发布时间】:2015-09-17 20:37:48
【问题描述】:

在新的更新中,Google 发布了一个新的 API 支持库,它支持 API 级别 7+ 中的 ActionBar。

在这次更新之前我一直使用 ActionBarSherlock,并且我编写了加载菜单的代码:

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

和菜单文件:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/item_menu_ok" android:icon="@drawable/ic_action_ok"
        android:title="@string/ok" android:showAsAction="always"></item>
    <item android:id="@+id/item_menu_cancel" android:icon="@drawable/ic_action_cancel"
        android:title="@string/cancel" android:showAsAction="always"></item>
</menu>

在操作栏上设置菜单按钮。此代码与 ActionBarSherlock 完美配合。但是当我将操作栏更改为新的支持库时,操作栏中不会显示按钮。即使它们被设置为android:showAsAction="always"。当我调试代码时,函数menu.getSize()返回2,这是正确的,但没有显示任何按钮..

为什么新的支持库中没有显示按钮?

【问题讨论】:

    标签: android android-actionbar android-menu android-support-library


    【解决方案1】:

    尝试按设备或模拟器上的 MENU 按钮,看看它们是否出现在溢出中。

    如果他们这样做了,那么问题是您的&lt;menu&gt; XML 需要更改。与 ActionBarSherlock 和本机 API 级别 11+ 操作栏一起使用的菜单 XML 将无法与 AppCompat 操作栏向后移植一起使用。

    您的菜单 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>
        <item android:id="@+id/item_menu_cancel" android:icon="@drawable/ic_action_cancel"
            android:title="@string/cancel" yourapp:showAsAction="always"></item>
    </menu>
    

    您需要为与操作栏相关的任何其他内容使用相同的 yourapp 前缀(例如,yourapp:actionLayout)。

    您可以在the action bar documentation 中看到这一点。

    【讨论】:

    • 是的,问题出在xmlns:yourapp="http://schemas.android.com/apk/res-auto"。这是 Support v7 的变化吗?因为在ActionBarSherlock 我的旧代码运行良好
    • @nrofis:我不知道为什么 AppCompat 不能像 ActionBarSherlock 那样使用android:showAsAction
    • 谢谢马克,我也在找这个。澄清一下,“yourapp”是否包含“com.xxx.package”或仅包含“package”?
    • 没有替换它的字面意思“yourapp”
    • @Wenger:属性上的yourapp 需要匹配根元素中的yourapp 命名空间声明。 AFAIK,只要这些名称相同(并且对 XML 有效),它们就可以是您想要的任何字符串。
    【解决方案2】:

    我想补充一点the answer.

    如果您想查看文本和图标,请在showAsAction 中使用withText 我刚刚测试过它;当我使用alwaysifRoom 而不使用withText 时,我只看到了一个图标。

    【讨论】:

      猜你喜欢
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2014-04-17
      • 2013-01-31
      • 1970-01-01
      相关资源
      最近更新 更多