保留设置了 showAsAction="ifRoom" 的项目的 orderInCategory

Preserve the orderInCategory of items having showAsAction="ifRoom" set

当第一个选项菜单显示为一个操作时,如果它是菜单中的唯一项目,我如何保留 android:orderInCategory 定义的顺序?

我定义了两个选项菜单,由两个不同的片段插入。如果两个 Fragment 没有同时显示,一切看起来都像预期的那样。

第一个选项菜单显示一个操作:

第二个选项菜单显示一项操作和一项菜单项:

现在,如果我同时在一个 Activity 中显示两个片段,我希望这些项目将遵循 android:orderInCategory 的值并显示为一个操作和两个菜单项:

相反,显示了两个操作并且只有一个菜单项:

那么我怎样才能达到预期的结果呢?


Fragment1 插入:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/action3"
        android:icon="@android:drawable/ic_menu_delete"
        android:orderInCategory="500"
        android:showAsAction="ifRoom"
        android:title="Action3"/>
</menu>

Fragment2 插入:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/action1"
        android:icon="@android:drawable/ic_menu_edit"
        android:orderInCategory="100"
        android:showAsAction="ifRoom|withText"
        android:title="Action1"/>
    <item
        android:id="@+id/action2"
        android:orderInCategory="300"
        android:showAsAction="never"
        android:title="Action2"/>
</menu>

Android 遵守顺序,但 android:showAsAction 优先。因为您将 action2 指定为 "never",将另外 2 个指定为 "ifRoom",它首先将另外 2 个显示为操作项,然后在溢出菜单中显示 action2。

要获得您想要的行为,您应该为 action3 将 showAsAction 设置为 "never"。