操作栏操作项未显示

24

我有一段非常简单的代码,但是一个问题让我在长时间的谷歌搜索后仍然无法解决。我想在我的ActionBar中添加一些操作项(Action Items),但每当我运行应用程序时,我只看到一个带有应用程序徽标和标题的ActionBar,没有任何操作项。

如果你能帮助我,那就太好了,也许我只是忽略了最显而易见的东西 ;)

这是我ActionBarActivity中的方法:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_activity_actions, menu);
    return super.onCreateOptionsMenu(menu);
}

这是ActionBar的相关.xml文件(名为main_activity_actions.xml):

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_search"
      android:title="@string/action_search"
      android:showAsAction="always"  />
<item android:id="@+id/action_compose"
      android:icon="@drawable/ic_action_compose"
      android:title="@string/action_compose" 
      android:showAsAction="always"/>
</menu>

代码看起来正确。但是你在清单文件中声明的minTargetSdk是多少,以及你测试应用程序的Android版本是什么? - lory105
4个回答

69

这是因为如果您使用支持AppCompat ActionBar库和ActionBarActivity,您应该以不同于在ActioBarSherlock或默认ActionBar中创建XML菜单的标准方式创建菜单。

因此,请尝试使用以下代码:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:app="http://schemas.android.com/apk/res-auto">
      <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          app:showAsAction="always"  />
      <item android:id="@+id/action_compose"
          android:icon="@drawable/ic_action_compose"
          android:title="@string/action_compose" 
          app:showAsAction="always"/>
</menu>

并报告是否有效。

注意:请检查应使用的额外前缀xmlns:app


5
为了澄清一下,“app”被使用了3次:在菜单中和每个项目中各一次。我必须应用差异才能捕捉到这一点 :-) - U Avalos
1
这与使用应用兼容库有关,因此您可以在旧版本的Android上使用它。如果您的目标是新版本,则不需要这样做,并将API最低版本设置得更高。 - reidisaki

6
请确保您未使用渲染操作项不可见的样式。
例如,如果您使用“android:Theme.Holo.Light.DarkActionBar”,则会得到黑色操作栏,因此您将无法看到黑色操作项。
切换到“android:Theme.Holo.Light”,它们将显示出来。
请查看文件(例如)res/values-v14/styles.xml。

1

您需要在xml中添加菜单,如下所示:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/menu_settings"
        android:orderInCategory="0"
        android:showAsAction="always"
        android:icon="@drawable/menu">
    <menu>
        <item android:id="@+id/action_search"
            android:icon="@drawable/ic_action_search"
            android:title="@string/action_search"
            android:showAsAction="always"  />
        <item android:id="@+id/action_compose"
            android:icon="@drawable/ic_action_compose"
            android:title="@string/action_compose" 
            android:showAsAction="always"/>
        </menu>
    </item>
</menu>

这个不起作用,行动项仍然没有显示出来。 - Kilian Batzner

0

试试这个:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_activity_actions, menu);
    return true;
}

1
不,它不是那样工作的。 - Kilian Batzner
我很好奇,我总是这样使用回调函数,从未遇到问题。所以我想知道你的整体设置,例如minSDK和是否使用支持库? - Steve Benett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接