【问题标题】:Can I use a actionLayout on the overflow menu of android.support.v7.widget.Toolbar?我可以在 android.support.v7.widget.Toolbar 的溢出菜单上使用 actionLayout 吗?
【发布时间】:2016-05-31 04:21:43
【问题描述】:

我正在尝试在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个点。

我知道可以选择使用复选标记,但我遵循的设计需要切换。

谢谢。

【问题讨论】:

    标签: android android-appcompat android-toolbar android-compatibility


    【解决方案1】:

    这是不可能的。

    这是因为 actionLayout 仅在项目显示为操作时使用。它相当于setActionView,并且来自documentation

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

    因此,如果将自定义视图用作操作,您可以对其进行扩充(如果 showAsActionnever,则它不会按预期显示为操作)。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-18
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      相关资源
      最近更新 更多