【问题标题】:ActionBar item does not shown in Option MenuActionBar 项目未显示在选项菜单中
【发布时间】:2014-08-06 21:02:51
【问题描述】:

当“菜单项”中的项目已显示在操作栏上时,我无法显示这些项目。

这是我的 onCreateOptionsMenu 方法:

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

这是我的 opt_menu_main 布局:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item
    android:id="@+id/menu_act_settings"
    android:title="Settings" 
    android:icon="@drawable/ic_action_settings"
    android:showAsAction="ifRoom"/>
</menu>

我没有使用支持库(我的目标 API 是 17)。

如果我单击菜单按钮,它总是空的,因为该项目已经显示在 ActionBar 上。 我尝试添加更多项目,但是当这些项目出现在 ActionBar 上时,它们不会显示在选项菜单中。

我也尝试过showAsAction="ifRoom|withText",但不起作用。

我认为这种行为是正确的,但是否可以同时在菜单和操作栏中显示相同的项目?

谢谢

【问题讨论】:

    标签: android menu android-actionbar option


    【解决方案1】:

    试试这个:

    app:showAsAction="always"
    

    但不要忘记在定义的开头添加这一行:

    xmlns:app="http://schemas.android.com/apk/res-auto"
    

    【讨论】:

    • 谢谢,但如果我设置为始终,项目将不会显示在选项菜单上。我想在菜单和操作栏上显示相同的项目。
    • 不,我在菜单和操作栏中都有这个选项的“刷新”按钮!
    • 我现在又试了一次,但是使用 android:showAsAction="always" 选项菜单中没有项目,它只显示在操作栏中。一周前,我尝试使用支持库(因此使用 xmlns:app 标签和 app:showAsAction),但我得到了相同的结果,所以现在我删除了支持库。我认为我不应该使用支持库,因为我的目标 API 是 17
    【解决方案2】:

    菜单项的 ID 必须是唯一的。最好的选择是使用另一个 Id 创建另一个菜单项并将其 showAsAction 设置为“从不”以强制它始终进入溢出菜单。但是,如果您还显示其他主要选项,则它们是一个机会,它可能会强制两者进入溢出,在这种情况下,您将看到两个具有相同标题的菜单项。

    【讨论】:

    • 谢谢正是我所做的,我以为我已经解决了这个问题,但我注意到在另一个没有足够空间的设备上,我在溢出菜单中有 2 个项目,所以我已经问了这个问题。也许可以设置 2 个不同的菜单,一个用于操作栏,一个用于选项菜单?
    • 不。它们被认为是同一个菜单。
    【解决方案3】:

    目前我是这样解决的:

    <menu xmlns:android="http://schemas.android.com/apk/res/android"> 
        <item
        android:id="@+id/menu_act_settings"
        android:title="Settings" 
        android:icon="@drawable/ic_action_settings"
        android:showAsAction="always"/>
        <item
        android:id="@+id/menu_settings"
        android:title="Settings" 
        android:showAsAction="never"/>
    </menu>
    

    所以在 onOptionsItemSelected 方法中:

    public boolean onOptionsItemSelected(MenuItem item) { 
        switch (item.getItemId()) { 
            case R.id.menu_add_schedule:
            case R.id.menu_act_add_schedule:
                    //some code
                break; 
            }
        return true; 
    }
    

    我认为这不是一个正确的解决方案,因为在某些设备上没有足够的空间在 ActionBar 上添加此项目和其他项目, 由于它们被定义为 showAsAction="always",它们会在 ActionBar Title 上重叠,因此会产生一些布局问题。

    我想要的行为是始终显示选项菜单上的项目,如果有足够的空间,也将其显示在操作栏中。

    使用 showAsAction="always" 无法获得此行为。

    如果有人能找到更好的解决方案,那就太好了。

    还是谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 2012-01-05
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      相关资源
      最近更新 更多