我有一个带有 NoActionBar 主题的应用。在我的主要 Activity 中,我有一个选项菜单,该菜单是我在屏幕顶部手动创建的(或者通过使用内置设备的选项按钮创建)。

在此主要 Activity 中,我有一个 fragment listView ,在其中我应用了操作模式长按功能,以显示上下文操作栏(CAB),以供其他用户选择。

现在,我尝试在我的CAB中添加一个选项项目,以便它包含一些选项,例如在listView中选择所有项目,但是由于它是CAB的一项,因此我无法像在常规 Activity 中那样真正显示弹出菜单。此外,我希望所有选项菜单回调(例如onOptionsItemSelected)都保留在CAB的上下文中,以便能够继续在CAB上执行操作。

这是我的CAB的代码:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_delete"
        android:orderInCategory="100"
        app:showAsAction="always"
        android:icon="@drawable/ic_action_delete"
        android:title="Delete"/>

    <item
        android:id="@+id/action_overflow"
        app:showAsAction="always"
        android:orderInCategory="200"
        android:icon="@drawable/ic_action_overflow"
        android:title="Options"
        android:visible="false"/>

</menu>

最佳答案

显然,我错过了CAB的内置功能-内置的溢出菜单,一旦屏幕太小无法显示所有 Action ,它们就会折叠一些 Action 项。

为了始终将某些 Action 折叠在该溢出菜单下,需要执行的另一种操作是为每个 Action 设置一个:

android:showAsAction="never"
app:showAsAction="never"

因此,假设我们在CAB中有3个操作(删除,selece_all,添加),并且我们希望其中两个(select_all,添加)始终折叠在内置的溢出菜单下,我们将在CAB的xml中进行设置:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mm="http://schemas.android.com/apk/res-auto">

<item
    android:id="@+id/action_delete"
    android:orderInCategory="100"
    mm:showAsAction="always"
    android:icon="@drawable/ic_action_delete"
    android:title="Delete"/>

<item
    android:id="@+id/action_select"
    android:orderInCategory="200"
    android:showAsAction="never"
    mm:showAsAction="never"
    android:title="@string/select_all"/>

<item
    android:id="@+id/action_add"
    android:orderInCategory="300"
    android:showAsAction="never"
    mm:showAsAction="never"
    android:title="@string/button_add"/>

10-08 06:51