Android L's Ripple Effect - Touch Feedback for Buttons - Using XML
UPDATE Material Components:
With the Material Components Library it is very easy to apply a ripple.
Just use the MaterialButton
and the app:rippleColor
attribute:
<com.google.android.material.button.MaterialButton app:rippleColor="@color/my_selector" ../>
With a selector like this:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:alpha="..." android:color="?attr/colorOnPrimary" android:state_pressed="true"/> <item android:alpha="..." android:color="?attr/colorOnPrimary" android:state_focused="true" android:state_hovered="true"/> <item android:alpha="..." android:color="?attr/colorOnPrimary" android:state_focused="true"/> <item android:alpha="..." android:color="?attr/colorOnPrimary" android:state_hovered="true"/> <item android:alpha="..." android:color="?attr/colorOnPrimary"/></selector>
Old answer
You can do something like this:
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/ripple" />
Where the ripple.xml is:
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?android:colorControlHighlight"> <item android:id="@android:id/mask"> <shape android:shape="oval"> <solid android:color="?android:colorAccent" /> </shape> </item> </ripple>
Just put ?attr/selectableItemBackground
in the background of button for API 21+ , like below:
<Button android:layout_width="match_parent" android:layout_height="70dp" android:background="?attr/selectableItemBackground" android:text="Button" />
For lollipop(API>21) make file as btn_ripple_effect.xml in drawable and put below code
<?xml version="1.0" encoding="utf-8"?><ripple xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:color="?android:colorAccent" tools:targetApi="lollipop"> <item android:drawable="@color/cancel_btn_clr" /> <!-- default --> <item android:id="@android:id/mask"> <shape android:shape="rectangle"> <solid android:color="?android:colorAccent" /> </shape> </item></ripple>
For pre lollipop (API<21)make file as btn_ripple_effect.xml in drawable-v21 folder and put below code
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape> <solid android:color="@color/colorAccent"></solid> </shape> </item> <item> <shape> <solid android:color="@color/cancel_btn_clr"></solid> </shape> </item></selector>