android.support.v7与`ActionBarActivity`没有菜单显示

nro*_*fis 40 android android-menu android-actionbar android-support-library

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

我使用ActionBarSherlock直到这个更新,我编写了加载菜单的代码:

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

和菜单文件:

<?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>
Run Code Online (Sandbox Code Playgroud)

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

为什么按钮未显示在新支持库中?

Com*_*are 104

尝试按设备或仿真器上的MENU按钮,看看它们是否出现在溢出中.

如果他们这样做,那么问题是你的<menu>XML需要改变.与ActionBarSherlock一起使用的菜单XML和本机API Level 11+操作栏不适用于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>
Run Code Online (Sandbox Code Playgroud)

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

您可以在操作栏文档中看到这一点.

  • @Wenger:属性上的`yourapp`需要匹配根元素中的`yourapp`名称空间声明.AFAIK,只要这些名称相同(并且对XML有效),它们就可以是您想要的任何字符串. (8认同)
  • @nrofis:我不知道为什么AppCompat不能像ActionBarSherlock那样使用`android:showAsAction`. (5认同)
  • 是的,问题是`xmlns:yourapp ="http://schemas.android.com/apk/res-auto"`.这是Support v7的变化吗?导致`ActionBarSherlock`我的旧代码完美无缺 (2认同)
  • 没有替换它的字面意思"yourapp" (2认同)