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>