Ефект Ripple на пристроях до та Lollipop +
харран і Лютінг мають рацію. Прийнята відповідь - не найкращий спосіб. Дозвольте мені показати в коді, як змінити колір пульсацій для версій до Lollipop та новіших
Ваша AppTheme повинна успадковувати будь-яку тему AppCompat і містити атрибут colorControlHighlight (без префіксу 'android:')
<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="colorControlHighlight">#40ffffff</item>
</style>
Ваш погляд повинен містити clickkable = "true" (або повинен мати програмно встановлений слухач кліків), а фон повинен бути "? Attr / selectableItemBackgroundBorderless" або "? Attr / selectableItemBackground":
<LinearLayout
...
android:clickable="true"
android:background="?attr/selectableItemBackgroundBorderless"/>
Зауважте: якщо у вашого батьківського перегляду є білий фон, ви не побачите ефект пульсації, оскільки він білий. Змінення кольоруControlHighlight для іншого кольору
Крім того, якщо ви хочете різних кольорів пульсацій для різних видів діяльності, ви можете встановити особисту тему для кожної діяльності у файлі Manifest, наприклад:
<activity
android:name="com.myapp.GalleryActivity"
android:theme="@style/RedRippleTheme"
/>
Різні кольори пульсацій для різних фрагментів в одній діяльності?
Ви можете змінити атрибути Теми активності для кожного фрагмента під час виконання. Просто перезапишіть їх, перш ніж фрагмент буде завищений вашим власним стилем і застосувати до поточної теми:
у значеннях / styles.xml
<style name="colorControlHighlight_blue">
<item name="colorControlHighlight">@color/main_blue_alpha26</item>
</style>
Потім у своєму фрагменті перед інфляцією onCreateView()
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getContext().getTheme().applyStyle(R.style.colorControlHighlight_blue, true); //blue ripple color
View view = inflater.inflate(R.layout.my_fragment_layout, container, false);
return view;
}
Цей стиль буде працювати лише для цього фрагмента
Різний колір пульсацій для різних поглядів? (Льодяник +)
Ви можете змінити колір пульсацій для кожного перегляду окремо, використовуючи
colorControlHighlight
атрибут, він не працює, якщо застосувати їх до подання безпосередньо:
<TextView
...
colorControlHighlight="#40ffffff"/> <!-- DOESN'T WORK -->
ви повинні застосувати його як тему:
<TextView
...
android:theme="@style/colorControlHighlight_blue"/>
PS Також іноді такий підхід допомагає, якщо у вас є невідомі проблеми з пульсацією, і ви не можете цього зрозуміти. У моєму випадку я використовував сторонню розсувну вкладку, яка псувала ефекти пульсації для всієї верстки та явно додавала цю тему до всіх розроблених для мене видів, що можна натискати.
colorControlHighlight
замістьandroid:colorControlHighlight
робіт краще для мене, в іншому випадку це тільки для v21 +