Recently, I have some need to add ripple effect which was introduced following Material Design into a button that already has background. The background is a selector. And I’ve found two solution.
1. Use foreground
android:foreground=”?android:attr/selectableItemBackground”
2. Use default attr background
- Ripples contained within the view:
android:background="?attr/selectableItemBackground"
- Ripples that extend beyond the view’s bounds:
android:background="?attr/selectableItemBackgroundBorderless"
So, use this selector in api 21 directory.
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#DDDDDD">
<item>
<selector >
<item android:state_pressed="true"
android:drawable="@color/theme_background_tab"/>
<item android:state_activated="true"
android:drawable="@color/theme_background_tab"/>
<item android:drawable="@color/theme_white"/>
</selector>
</item>
</ripple>
and in the normal directory
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@color/theme_background_tab"/>
<item android:state_activated="true"
android:drawable="@color/theme_background_tab"/>
<item android:drawable="@color/theme_white"/>
</selector>
This will let the android below api 21 have the desired effect I wanted.
Also, I got this useful material:Using ?attr:
instead of ?android:attr
references the support library, so is available back to API 7.
The Ripple Effect need API 21+, and the offical site tell us how to create custom effect and color. Also, I found some great project in Android Arsenal, like RippleLayout and RippleEffect.Some effect is really beautiful.