【问题标题】:Show Menu item always in support action bar始终在支持操作栏中显示菜单项
【发布时间】:2014-03-07 06:45:36
【问题描述】:

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

<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);
}

我们将不胜感激。

【问题讨论】:

  • 可能是您缺少命名空间。请检查此link

标签: android android-actionbar optionmenu


【解决方案1】:

如果你使用AppCompatActionBar,你必须这样改变你的布局:

<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 属性仅适用于自定义前缀,请参阅the documentation。根据它:

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

希望这会有所帮助。

【讨论】:

  • 我正在使用 AppCompat 库。当我使用 app:showAsAction="always" 时,它不会给我任何结果。所有菜单都在下拉菜单下。但是,如果我输入android:showAsAction="always",即使我使用 AppCompat,我也会得到预期的结果,但语句下方会出现红线警告。这种情况应该怎么办?
【解决方案2】:

来自docs 您应该将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>

【讨论】:

  • 这一行没有效果。
  • 更新代码?你能把溢出图标也显示为截图吗
  • 我添加了示例图片。我想显示永久按钮。不下拉。
  • 谢谢卡平。我得到了答案。
【解决方案3】:

您可以在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,错误就会消失。如果这样做,请再次清理项目,错误就会消失。
【解决方案4】:

删除这一行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>

【讨论】:

    【解决方案5】:

    我知道这个问题已有 2 年以上的历史了,但为了完整起见,如果您想在代码中设置它,请使用以下代码:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      相关资源
      最近更新 更多