Ripple 的颜色应该是 colorPrimary 还是 colorAccent?(Material Design)

69
我正在阅读Material Design指南,但我不知道如果涟漪不是黑色(带alpha),它应该是什么颜色。
例如,我有一个应用程序,colorPrimary = blue,colorAccent = red。实际上,我正在使用colorAccent(带alpha),如果我想要一个不同于黑色的颜色来制作涟漪,我应该使用colorPrimary(带alpha)吗?
我检查了Google的所有应用程序,但他们从未使用过带颜色的涟漪。
像我现在拥有的这张图片:

ripple

5个回答

75

为彩色涟漪使用26%的 alpha 值。

Android L 不支持在颜色状态列表和 <ripple> 元素中使用主题属性,但对于有界涟漪,您可以做如下处理:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="?android:attr/colorAccent">
    <item android:id="@android:id/mask">
        <color android:color="#42ffffff" />
    </item>
</ripple>

这对于无限波纹不起作用。相反,由于您知道自己的强调色,可以定义一个26%的 alpha 版本,或者使用颜色状态列表。这两种方法都可以很好地适用于无限波纹。

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@color/accent_26" />

res/values/colors.xml:

<resources>
    ...
    <color name="accent">#ff33b5e5</color>
    <color name="accent_alpha26">#4233b5e5</color>
</resources>

res/color/accent_alpha26.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/accent"
          android:alpha="0.26" />
</selector>

4
问题不在于这个,而是关于Google指南建议在涟漪效果中使用主色和强调色。你可以通过在样式中使用colorControlHighlight轻松设置涟漪颜色。 - JavierSegoviaCordoba
24
我是编写Material styles and themes的Android框架工程师。这里指定了有色波纹的透明度为26%。你可以通过使用后两个选项之一,在你的主题或覆盖主题中设置它。请注意,不要改变原文的意思。 - alanv
1
colorAccent 是不透明的,因此这个例子依赖于颜色混合来实现 26% 的 alpha 值。默认的涟漪颜色 colorControlHighlight 已经内置了不透明度,您可以使用 @color/white 作为遮罩颜色。 - alanv
2
RippleDrawable 的当前实现将颜色分成前景(扩展)和背景(淡入),因此当键盘聚焦时(仅背景)或触摸并完成按下状态动画时(前景和背景都有),纯黑色将显示50%的黑色或100%的黑色。这仍然可能会改变,因此我们尚未公开任何用于单独控制它们的API。 - alanv
1
这是涟漪效果的 Material 规范的一部分,但我认为该规范尚未发布(仍在进行中,因为每个版本之间的涟漪行为都有所改变 ;))。 - alanv
显示剩余5条评论

54

这就是您所寻找的内容:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   ...
   <item name="colorControlHighlight">@color/ripple_material_dark</item>
   ...
</style>

41

Widget.Material.Button 样式使用 btn_default_material.xml 作为其背景:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight">
  <item android:drawable="@drawable/btn_default_mtrl_shape" />
</ripple>

请注意,涟漪颜色是?attr/colorControlHighlight默认情况下#40ffffff或#40000000(分别用于深色和浅色主题),如触摸反馈指南所述。

正如您所注意到的,涟漪是用于轻微指示触摸反馈的,因此它们默认情况下不使用colorPrimarycolorAccent。这与Android 4.4(Kitkat)中所做的更改一致,该更改使默认选择器颜色默认情况下为中性颜色。


我认为谷歌在触摸反馈方面存在问题。例如,在Play商店、Gmail、Chrome等应用中,滚动效果的颜色是中性的,但在Youtube中是红色的,在Play Books中是蓝色的...他们应该在Material Design指南中添加一篇文章来讨论这个问题。 - JavierSegoviaCordoba
他们有其他指南,但应该更新... http://developer.android.com/design/style/touch-feedback.html - JavierSegoviaCordoba

15

这是Roman Nurik在Twitter上对我的问题的回复:

Roman Nurik
@romannurik

@dahnark @romainguy 这取决于情况,但很少需要使用强调色。我认为一般使用中性或主要颜色更好。

涟漪颜色


一般来说,这是正确的,您不会想在大面积使用有色涟漪。 - alanv
我希望能够远离Material规定,让波纹呈现不同的颜色,但需要一个波纹透明度参数,以便我可以将其设置为100%。 - William T. Mallard

14

以下是 AppCompat 中定义的颜色供参考。

<color name="ripple_material_dark">#33ffffff</color>
<color name="ripple_material_light">#1f000000</color>`

1
为什么 ripple_material_light 是暗色调,而 ripple_material_dark 是浅色调?我有什么遗漏吗? - iCantC
1
@iCantC 是因为在暗色主题下,涟漪需要是浅色才能看得见,反之亦然。 - RiccardoCh

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