Эффект пульсации на устройствах pre- и Lollipop +
Харран и Лютинг правы. Принятый ответ - не лучший вариант. Позвольте мне показать в коде, как изменить цвет пульсации для версий до Lollipop и выше
Ваша AppTheme должна быть унаследована от любой темы AppCompat и содержать атрибут colorControlHighlight (без префикса android:)
<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="colorControlHighlight">#40ffffff</item>
</style>
Ваше представление должно содержать clickable = "true" (или должно иметь программную установку прослушивателя кликов), а фон должен быть "? Attr / selectableItemBackgroundBorderless" или "? Attr / selectableItemBackground":
<LinearLayout
...
android:clickable="true"
android:background="?attr/selectableItemBackgroundBorderless"/>
Примечание: если у родительского представления белый фон, вы не увидите эффекта ряби, так как он белый. Измените значение colorControlHighlight на другой цвет
Кроме того, если вам нужны разные цвета пульсации для разных действий, вы можете установить индивидуальную тему для каждого действия в файле манифеста, например:
<activity
android:name="com.myapp.GalleryActivity"
android:theme="@style/RedRippleTheme"
/>
Разные цвета пульсации для разных фрагментов в одном и том же упражнении?
Вы можете изменить атрибуты Activity Theme для каждого фрагмента во время выполнения. Просто перезапишите их, прежде чем фрагмент будет наполнен вашим собственным стилем, и примените к текущей теме:
в values / 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 +