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

我想在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点打开。

我知道有一个选项使用复选标记,但是我所遵循的devise要求进行切换。

谢谢。

Solutions Collecting From Web of "我可以在android.support.v7.widget.Toolbar的溢出菜单上使用actionLayout吗?"

这是不可能的。

这是因为actionLayout只在项目显示为action时使用。 它相当于setActionView ,从文档 :

为此菜单项设置一个操作视图。 当该项目被显示为父项目中的动作时,将在UI中显示动作视图以代替自动生成的菜单项目元素。

所以,如果用作动作(如果showAsAction never ,那么它不会像预期的那样显示为动作),就可以膨胀自定义视图。

现在,隐藏在其他地方,在ActionProvider的文档中 ,有这样的:

当菜单项以不允许自定义操作视图的方式呈现时(例如,在溢出菜单中),ActionProvider可以执行默认操作。

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

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