【问题标题】:Menu icon not displayed in Action Bar - Android操作栏中未显示菜单图标 - Android
【发布时间】:2014-02-23 16:24:13
【问题描述】:

名为“action_settings”的菜单项显示在我的 Nexus 5 上,但没有我在 XML 中指定的齿轮图标,以及我没有指定的 android 选项图标。它在 Galaxy S2 上根本不显示。有谁知道为什么会发生这种奇怪的行为?我的其余菜单按预期显示。谢谢。

编辑这可能是因为它不适合,因为当我单击电话菜单按钮时,它会直接进入我在 action_settings 菜单项中的 2 个复选框。但是一半的操作栏仍然可以免费使用:/

编辑我的 Nexus 5 上显示的图标称为“溢出”图标。 3个垂直方块。可能是提示太多操作栏图标。

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.dressing_room, menu);
        return true;
    }   

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int itemId = item.getItemId();

        switch (itemId) {
            case R.id.menu_femaleHat :  addClothes(R.id.menu_femaleHat);
                     break;
            case R.id.menu_femalePants:  addClothes(R.id.menu_femalePants);
                     break;
            case R.id.menu_femaleTop:  addClothes(R.id.menu_femaleTop);
                     break;
            case R.id.menu_maleHat:  addClothes(R.id.menu_maleHat);
                     break;
            case R.id.menu_malePants:  addClothes(R.id.menu_malePants);
                     break;
            case R.id.menu_maleTop:  addClothes(R.id.menu_maleTop);
                     break;
            case R.id.menuMaleHair:  addClothes(R.id.menuMaleHair);
                     break;
            case R.id.menuFemaleHair:  addClothes(R.id.menuFemaleHair);
                     break;
            case R.id.menuMaleAccessories:  addClothes(R.id.menuMaleAccessories);
                     break;
            case R.id.menuFemaleAccessories:  addClothes(R.id.menuFemaleAccessories);
                     break;
            case R.id.action_save: saveClicked();// cropImage();
                     break;
            case R.id.action_cancel: goToStartScreen();// cropImage();
                     break;
            case R.id.uniformScale:
                changeAnisotropic(item);
                    break;
            case R.id.rotation:
                changeRotate(item);
                    break;
            default: Log.d("wrong menu","Invalid option");
                     break;
        }
        return super.onOptionsItemSelected(item);
    }

<item
    android:id="@+id/menu_sticker"
        android:showAsAction="always"
        android:icon="@drawable/ic_action_add"
        android:title="Add Sticker">
        <menu>
    <item
        android:id="@+id/menu_male"
        android:showAsAction="always"
        android:title="Male">
        <menu>
        <item
            android:id="@+id/menu_add_clothes"
            android:title="Add Clothes">
            <menu>
                <item
                android:id="@+id/menu_maleHat"
                android:title="Hat"/>
                <item
                android:id="@+id/menu_maleTop"
                android:title="Top"/>
                <item
                android:id="@+id/menu_malePants"
                android:title="Pants"/>
            </menu>
        </item>
        <item
        android:id="@+id/menuMaleAccessories"
        android:showAsAction="always"
        android:title="Add Accessories">
        </item>
        <item
            android:id="@+id/menuMaleHair"
            android:showAsAction="always"
            android:title="Add Hair">
        </item>
        </menu>
    </item>
    <item
        android:id="@+id/menu_female"
        android:showAsAction="always"
        android:title="Female">
        <menu>
        <item
            android:id="@+id/menu_add_clothes"
            android:title="Add Clothes">
            <menu>
                <item
                android:id="@+id/menu_femaleHat"
                android:title="Hat"/>
                <item
                android:id="@+id/menu_femaleTop"
                android:title="Top"/>
                <item
                android:id="@+id/menu_femalePants"
                android:title="Pants"/>
            </menu>
        </item>
        <item
        android:id="@+id/menuFemaleAccessories"
        android:showAsAction="always"
        android:title="Add Accessories">
        </item>
        <item
            android:id="@+id/menuFemaleHair"
            android:showAsAction="always"
            android:title="Add Hair">
        </item>
        </menu>
    </item>
    </menu>
 </item>

    <item
        android:id="@+id/action_settings"
        android:showAsAction="always"
        android:title="Sticker Settings"
        android:icon="@drawable/ic_action_gear">
            <group android:checkableBehavior="all">
                <item android:id="@+id/uniformScale"
                    android:title="Enable Re-sizing"
                    android:checked="true" />
                <item android:id="@+id/rotation"
                    android:title="Enable Rotation"
                    android:checked="false" />
            </group>
    </item>

    <item
        android:id="@+id/action_save"
        android:showAsAction="always"
        android:title="@string/action_save"
        android:icon="@drawable/ic_action_save">
    </item>

    <item
        android:id="@+id/action_cancel"
        android:showAsAction="always"
        android:title="Cancel"
        android:icon="@drawable/ic_action_cancel">
    </item>

【问题讨论】:

  • 按下硬件菜单按钮时你看到了吗?
  • @Arju 是的,我刚刚更新了我的问题。谢谢。
  • 你能在按下菜单的情况下发布这个截图吗?
  • @arju 我不想在这一点上发布这个应用程序的截图抱歉。
  • @Arju 我的最新编辑提示图标溢出。

标签: android menu menuitem


【解决方案1】:

你检查了吗

I have 3 menu icons on the menu bar

出于本答案的目的,我假设“菜单栏”指的是操作栏。

but everytime it only shows 2 icons, the last one is in nowhere

对于具有屏幕外 MENU 按钮的设备(或模拟器),按下 MENU 按钮可以使用最后一个。

there is enough space for 3 icons, why only 2 are shown?

大概是因为 Android 不同意您对是否有足够空间容纳 3 个图标的评估。

if the system thinks the space is not enough for the 3rd icon, why doesn't 
it combine the 2nd and 3rd icon into an overflow menu?

我不知道您为什么认为将第二个图标(您承认它适合)强制放入溢出菜单是个好主意。第三个菜单项位于溢出菜单中,对于缺少 MENU 按钮的设备,可通过操作栏上有一个或三个垂直点按钮的设备上的 MENU 按钮访问

Source

【讨论】:

  • 这似乎是正在发生的事情。我会想办法将更多选项组合到一个图标中。例如某种选项符号。谢谢!