Каким должен быть цвет Ripple, colorPrimary или colorAccent? (Дизайн материалов)

У меня есть Руководство по дизайну материалов, но я не знаю, какой должен быть цвет Ripple, если он не черный (с альфа).

Например, у меня есть приложение с цветомPrimary = синий, а colorAccent = красный. На самом деле я использую colorAccent (с альфой), я должен использовать colorPrimary (с альфой), если я хочу, чтобы цвет, отличающийся от черных, пульсировал?

Я проверил все приложения Google, но они никогда не используют рябь с цветом.

Изображение, подобное мне сейчас:

ripple

Ответ 1

Используйте 26% альфа для цветной ряби.

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% альфа-версию, либо использовать список состояний цвета. Любой из них будет отлично работать для неограниченной пульсации.

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

RES/значения/colors.xml:

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

Рез/цвет/accent_alpha26.xml:

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

Ответ 2

Стиль 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 (для темных и легких тем, соответственно), как указано в касание обратной связи.

Как вы заметили, рябь использует тонкие признаки сенсорной обратной связи, поэтому почему они не используют colorPrimary или colorAccent по умолчанию. Это согласуется с изменениями, внесенными в Android 4.4 (Kitkat), которые по умолчанию выбрали нейтральные цвета по умолчанию.

Ответ 3

Вот что вы ищете:

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

Ответ 4

Это ответ, который Роман Нурик дал мне в twitter на этот вопрос:

Роман Нурик
@romannurik

@dahnark @romainguy это зависит от ситуации, но редко вы хотите использовать цвет акцента. я бы сказал, вообще нейтральный или первичный

ripple color