始终在支持操作栏中显示菜单项

22

enter image description here我正在开发Android应用程序。我已经在其中实现了支持的操作栏。我想始终显示选项菜单项。但它没有显示。它只在下拉菜单中显示。我的菜单项代码如下。

<item
    android:id="@+id/action_settings"
    android:icon="@drawable/add_post"
    android:title="@string/action_settings"

    />

下面是 ActionBar Activity 的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return super.onCreateOptionsMenu(menu);
}

任何帮助都将不胜感激。


也许您缺少一个命名空间。请查看此链接:https://dev59.com/uGMm5IYBdhLWcg3wDbmo?answertab=active#tab-top - Pratap
5个回答

46

如果您使用AppCompat ActionBar,则必须按照以下方式更改布局:

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

showAsAction 属性只能在使用自定义前缀时才有效,请参见文档。根据文档所述:

请注意,上面的 showAsAction 属性使用了在<menu>标签中定义的自定义命名空间。这是在使用支持库定义的任何 XML 属性时必需的,因为这些属性在旧设备上的 Android 框架中不存在。

希望这有所帮助。


我正在使用AppCompat库。当我使用app:showAsAction="always"时,它没有给我任何结果。所有的菜单都显示在下拉菜单中。但是如果我使用android:showAsAction="always",即使我使用AppCompat,我也能得到预期的结果,但是语句下面会有一个红线警告。在这种情况下应该怎么办? - Shruti Dasgopal

28

根据文档,您应该将showAsAction属性添加到alwaysifRoom

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- Search, should appear as action button -->
    <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          android:showAsAction="ifRoom" />
    <!-- Settings, should always be in the overflow -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          android:showAsAction="never" />
</menu>

这行代码没有任何影响。 - Nitesh Kabra
请问代码更新了吗?您能否展示溢出图标的截图呢? - Shubhank
1
我已经添加了示例图像。我想显示永久按钮,而不是下拉菜单。 - Nitesh Kabra
谢谢Kabira。我得到了我的答案。 - Nitesh Kabra

8
您可以在Android菜单XML文件中使用不同的android:showAsAction属性值来显示不同类型的菜单。
如果您希望菜单始终可见于操作栏上,则应选择android:showAsAction =“always”选项。
您也可以选择android:showAsAction =“ifRoom”选项,但是该菜单项不会始终显示在操作栏上,而是根据屏幕大小进行相应的显示。
请尝试以下代码解决问题。
参考:Menu items doesn't show up on the actionbar
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" >
    <item
        android:id="@+id/menu_lang"
        app:showAsAction="always" <!-- app:showAsAction="ifRoom" -->
        android:title="@string/menu_lang"
        android:icon="@android:drawable/ic_input_lang"/>
</menu>

希望这会对你有所帮助..!!!

如果您在Eclipse中,有时XML会显示错误,您需要清理项目,只要您不再修改XML,错误就会消失。如果您修改了XML,请再次清理项目,错误将消失。 - tricknology

5

删除此行 xmlns:app="http://schemas.android.com/apk/res-auto"

使用android:showAsAction="always"代替app:showAsAction="always"

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/action_refresh"
    android:icon="@drawable/ic_refresh"
    android:showAsAction="ifRoom"
    android:title="@string/action_refresh"/>

<item
    android:id="@+id/action_filter"
    android:icon="@drawable/ic_filter"
    android:showAsAction="always"
    android:title="@string/action_filter"/>
</menu>

3

我知道这个问题已经超过两年了,但是为了完整起见,如果你想在代码中设置它,请使用以下代码:

menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

其他选项包括:

MenuItem.SHOW_AS_ACTION_NEVER
MenuItem.SHOW_AS_ACTION_IF_ROOM
MenuItem.SHOW_AS_ACTION_ALWAYS
MenuItem.SHOW_AS_ACTION_WITH_TEXT
MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW

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