我能在android.support.v7.widget.Toolbar的溢出菜单中使用actionLayout吗?

10

我正在尝试在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,则它会在工具栏上显示,但我不想要它在那里,我想要它出现在当我点击三个点时打开的溢出菜单中。

我知道有一个选项可以使用复选标记,但我正在遵循的设计需要使用开关。

谢谢。

1个回答

15

这是不可能的。

因为 actionLayout 仅在将该项显示为操作时使用。它相当于 setActionView,根据文档

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

因此,如果需要将其用作操作,则可以填充自定义视图(如果 showAsActionnever,则不会像预期那样显示为操作)。

现在,在另一个地方隐藏着,有关 ActionProvider 的文档中有如下描述:

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

明确指出了溢出菜单无法显示自定义视图。

[编辑:可能的解决方法]
如果您真的想以那种方式显示它,则可以使用PopupWindow伪造溢出菜单,但是这样可能会失去与某些设备或甚至在升级到 Android 后的平台上的一致性(例如...您使用了三个圆点来模拟溢出菜单,但稍后在 Android 上它被更改回方形,则您的应用程序将看起来很奇怪。此外,还需要额外的工作才能使其正常工作,而使用 Menu 则很简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接