我可以在 android.support.v7.widget.Toolbar 的溢出菜单上使用 actionLayout 吗?

Can I use a actionLayout on the overflow menu of android.support.v7.widget.Toolbar?

我正在尝试在 android.support.v7.widget.Toolbar 的溢出菜单上使用 SwitchCompat 小部件,但我无法让它工作,它总是显示为空白。

这是我的菜单定义:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      tools:context="com.oveflowtest.ScrollingActivity">
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never"/>
    <item android:id="@+id/test"
          app:actionLayout="@layout/testlayout"
          app:showAsAction="never"/>
</menu>

这里是 testlayout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
<android.support.v7.widget.SwitchCompat
    android:layout_width="match_parent"
    android:layout_height="match_parent" android:text="test"/>
</LinearLayout>

此外,如果我将 showAsAction 更改为 always 而不是 never 那么它在工具栏上显示得很好,但我不希望它出现在那里,我希望它出现在溢出部分当我按下 3 个点时打开的菜单。

我知道有一个选项可以使用复选标记,但我正在遵循的设计要求进行切换。

谢谢。

这不可能。

那是因为 actionLayout 仅在项目显示为操作时使用。它等同于 setActionView 并且来自 documentation:

Set an action view for this menu item. An action view will be displayed in place of an automatically generated menu item element in the UI when this item is shown as an action within a parent.

因此,如果自定义视图用作操作(如果 showAsActionnever,则它不会像预期的那样显示为操作)。

现在,隐藏在其他地方,在 documentation for ActionProvider 中,有这个:

When the menu item is presented in a way that does not allow custom action views, (e.g. in an overflow menu,) the ActionProvider can perform a default action.

明确指出溢出菜单不能显示自定义视图。

[编辑:可能的解决方法]
如果你真的想那样显示它,你可以用PopupWindow伪造一个溢出菜单,但这样你可能会在某些设备上甚至在升级后失去与平台的一致性到Android(比方说......你用三个圆点来模拟溢出菜单,但后来它在Android上变回正方形,你的应用程序看起来很奇怪。还有额外的努力来制作它使用 Menu 工作会很简单。