Android 独立工具栏项上的背景涟漪效应消失

Android 独立工具栏项上的背景涟漪效应消失,android,android-toolbar,Android,Android Toolbar,使用独立工具栏时,项目的可选择背景出现问题,以下文章也不起作用: 检查下面屏幕截图中的普通工具栏,使用独立工具栏时涟漪效果选择器消失 以下是我的风格: <style name="ToolbarTheme" parent="Widget.AppCompat.Toolbar"> <item name="actionMenuTextColor">@color/green</item> <item name="drawerAr

使用独立工具栏时,项目的可选择背景出现问题,以下文章也不起作用:

检查下面屏幕截图中的普通工具栏,使用独立工具栏时涟漪效果选择器消失

以下是我的风格:

 <style name="ToolbarTheme" parent="Widget.AppCompat.Toolbar">
        <item name="actionMenuTextColor">@color/green</item>
        <item name="drawerArrowStyle">@style/DrawerArrowToggle</item>
        <item name="colorControlNormal">@color/white</item>
        <item name="colorControlActivated">@color/white</item>
        <item name="android:textColorPrimary">@color/white</item>
        <item name="titleTextAppearance">@style/ActionBar.TitleText</item>
        <item name="android:actionOverflowButtonStyle">@style/MoreActionButton</item>
        <item name="actionButtonStyle">@style/Widget.AppCompat.ActionButton</item>
        <item name="selectableItemBackground">?android:selectableItemBackground</item>
        <item name="selectableItemBackgroundBorderless">?android:selectableItemBackground</item>
        <item name="colorControlHighlight">@color/accentColor</item>
    </style>

@颜色/绿色
@样式/抽屉箭头切换
@颜色/白色
@颜色/白色
@颜色/白色
@style/ActionBar.TitleText
@样式/更多操作按钮
@style/Widget.AppCompat.ActionButton
?android:selectableItemBackground
?android:selectableItemBackground
@颜色/强调色
编辑: 在从我的代码中分离出这个问题之后,我能够重现这个问题,它似乎与新的支持设计库有关。下面是有问题的测试代码:


这是使用android 5.1 genymotion emulator完成的

我没有发现你的问题,但我只是尝试创建一个与你相同的工具栏,但删除了一些我没有的样式

这是我的风格

  <style name="ToolbarTheme"
      parent="Widget.AppCompat.Toolbar">
    <item name="actionMenuTextColor">#1bff3a</item>
    <item name="colorControlNormal">#FFF</item>
    <item name="colorControlActivated">#FFF</item>
    <item name="android:textColorPrimary">#FFF</item>
    <item name="actionButtonStyle">@style/Widget.AppCompat.ActionButton</item>
    <item name="selectableItemBackground">?android:selectableItemBackground</item>
    <item name="selectableItemBackgroundBorderless">?android:selectableItemBackground</item>
    <item name="colorControlHighlight">@color/accentColor</item>
  </style>

结果截图


编辑

下载问题中提供的示例后,当使用
AppBarLayout
时,问题与独立工具栏或actionbar无关(两者都有相同的问题),问题似乎是
Ripple
效果将绘制在
AppBarLayout
上,而不是所选菜单项的视图上,我会录制一段视频来解释它

视频:


我将尝试找到解决方案。

看起来纹波效应仍然存在,但纹波颜色已经改变。我不确定你的问题是什么,但这就是我所看到的

我建议你搬走

        <item name="colorControlHighlight">@color/accentColor</item>
@color/accentColor

从代码中删除,然后再次运行。如果波纹不显示(应该显示),请更改强调色。

Chris Bane回答原始问题:

这是因为默认情况下?attr/actionBarItemBackground是一个无限的RippleDrawable,这意味着它将投影/绘制到下一个父对象上。在本例中,这是您实际上看不到的折叠工具栏布局

从图书馆的角度来看,我们在这里做不了什么。“解决方法”是将actionBarItemBackground设置为无边界:

<style name="Theme.Toolbar.Collapsing" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="actionBarItemBackground">?attr/selectableItemBackground</item>
</style>

<Toolbar
    ...
    android:theme="Theme.Toolbar.Collapsing" />

?属性/可选择项背景

关于
selectableItemBackground
的解决方法对我也不起作用。到目前为止,我提出的最佳策略是将工具栏的背景设置为透明:

<android.support.v7.widget.Toolbar
   ...
   android:background="@android:color/transparent"/>

这将在展开/折叠/中间状态下启用涟漪效应(裁剪到操作栏高度)。

这对我很有效:

在styles.xml中定义自定义主题

<style name="MyAppbarTheme" parent="@style/ThemeOverlay.AppCompat.Light">
    <item name="colorControlHighlight">@color/colorAccent</item>
</style>

@颜色/颜色重音
然后在AppBarLayout或工具栏上应用此主题

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/MyAppbarTheme" >

我的项目中的好例子:

            android:id="@+id/..."
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:layout_marginEnd="@dimen/..."
            android:background="@drawable/button_ripple_circle_green"
            android:theme="@style/SearchViewTheme"
            android:visibility="visible"
            app:elementColor="@color/white"
            app:hintColor="@color/text_disabled_light"
            app:leftIconMode="back"
            app:leftSearchSpace="@dimen/..."
            app:textColor="@color/white"
            app:textSize="@dimen/..."
            tools:visibility="visible" />
这是xml(android:background),其中是图标“搜索”和“返回”的连锁反应:



您有什么问题?你没有得到选择器?我没有得到工具栏项目的选择器,上图中搜索项目背后的绿色涟漪效应,当我使用独立工具栏而不是普通工具栏时,它就消失了。这可能是一个问题,所以我为库提交了一个错误:@MahdiHijazi感谢填充的错误。我不同意谷歌团队所说的“按预期工作”,因为如果这样做了,我们就不需要解决办法了。但是透明的背景效果很好。
<style name="MyAppbarTheme" parent="@style/ThemeOverlay.AppCompat.Light">
    <item name="colorControlHighlight">@color/colorAccent</item>
</style>
<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/MyAppbarTheme" >
            android:id="@+id/..."
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:layout_marginEnd="@dimen/..."
            android:background="@drawable/button_ripple_circle_green"
            android:theme="@style/SearchViewTheme"
            android:visibility="visible"
            app:elementColor="@color/white"
            app:hintColor="@color/text_disabled_light"
            app:leftIconMode="back"
            app:leftSearchSpace="@dimen/..."
            app:textColor="@color/white"
            app:textSize="@dimen/..."
            tools:visibility="visible" />
<item android:state_pressed="true">
    <shape android:shape="oval">
        <solid android:color="@color/icon_toolbar_pressed"/>
        <corners android:radius="3dp"/>
    </shape>
</item>

<item android:state_pressed="false">
    <shape android:shape="oval">
        <solid android:color="@color/primary"/>
        <corners android:radius="3dp"/>
    </shape>
</item>