Android Ripple、colorPrimary或colorAccent的颜色应该是什么?(材料设计)

Android Ripple、colorPrimary或colorAccent的颜色应该是什么?(材料设计),android,colors,material-design,ripple,design-guidelines,Android,Colors,Material Design,Ripple,Design Guidelines,我有阅读,但我不知道什么应该是波纹的颜色,如果它不是黑色(与阿尔法) 例如,我有一个应用程序,colorPrimary=blue,colorAccent=red。实际上,我使用的是colorAccent(带有alpha),如果我想要黑色与涟漪不同的颜色,我应该使用colorPrimary(带有alpha) 我检查了谷歌的所有应用程序,但他们从不使用彩色涟漪 像我现在这样的形象: 该样式使用作为背景: <ripple xmlns:android="http://schemas.android

我有阅读,但我不知道什么应该是波纹的颜色,如果它不是黑色(与阿尔法)

例如,我有一个应用程序,colorPrimary=blue,colorAccent=red。实际上,我使用的是colorAccent(带有alpha),如果我想要黑色与涟漪不同的颜色,我应该使用colorPrimary(带有alpha)

我检查了谷歌的所有应用程序,但他们从不使用彩色涟漪

像我现在这样的形象:

该样式使用作为背景:

<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
,如中所述(分别适用于深色和浅色主题)


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

这是罗曼·努里克在推特上对这个问题的回答:

罗马努里克
@罗曼努里克

@dahnark@Romanguy它因情况而异,但很少使用强调色。我一般说来是中性的或初级的


对彩色波纹使用26%的alpha

Android L不支持颜色状态列表中的主题属性,
元素没有alpha通道,但对于有界涟漪,您可以执行以下操作:

<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>

...
#ff33b5e5
#4233b5e5
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>

以下是您要查找的内容:

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

...
@颜色/波纹\u材质\u深色
...

这些是AppCompat中定义的颜色,仅供参考

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

我认为谷歌在触摸反馈方面存在问题。例如,滚动效果在Play Store、Gmail、Chrome。。。但在Youtube上是红色的,剧本是蓝色的。。。他们应该在材料设计指南中添加一篇文章来讨论这一点。他们还有其他指南,但应该更新。。。一般来说,这是正确的,并且您不希望对大面积使用彩色波纹。我希望远离材质规定,使用不同颜色的波纹,但需要一个波纹不透明度参数,以便将其设置为100%。这不是问题,是关于谷歌的指导方针,建议在涟漪中使用原色与强调色。您可以在自己的风格中使用colorControlHighlight轻松设置涟漪颜色。我是Android框架工程师,他编写了。彩色涟漪的alpha值为26%。是的,您也可以使用后两个选项之一在主题或覆盖主题中设置此选项。
colorAccent
是不透明的,因此这里的示例依赖于颜色混合来实现26%的alpha。默认的涟漪颜色,
colorControlHighlight
具有内置的不透明度,您可以使用
@color/white
作为遮罩颜色。
RippleDrawable
的当前实现将颜色分为前景(展开)和背景(淡入),因此当键盘聚焦时纯黑色将显示50%的黑色(只有背景)或触摸时100%黑色,按下状态动画完成(前景和背景)。这仍然会发生变化,因此我们没有公开任何单独控制它们的API。这是涟漪材质规范的一部分,但我认为规范的这一部分尚未发布(仍然是在制品,每个版本的ripple行为都会发生变化;)。为什么
ripple\u material\u light
是深色,而
ripple\u material\u dark
是浅色,我缺少了什么吗?@iCantC因为在深色主题中,ripple需要浅色才能看到,反之亦然