Android, setting background color of button loses ripple effect
You can add the ripple effect & background color with an additionnal ripple drawable:
your layout :
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/button_connect" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="20dip" android:fontFamily="sans-serif" android:text="Connect" android:background="@drawable/ripple" android:textColor="#FFFFFF" android:textSize="18sp" /></LinearLayout>
ripple.xml (this is where you can add background color in addition to the ripple effect) :
<?xml version="1.0" encoding="utf-8"?><!-- in drawable folder--><ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?android:colorControlHighlight"> <item android:id="@android:id/mask"> <shape android:shape="rectangle"> <solid android:color="?android:colorAccent" /> </shape> </item> <item> <shape android:shape="rectangle"> <!-- put your background color here--> <solid android:color="@color/default_color" /> </shape> </item></ripple>
A very simple and straight forward way of doing this is to set ?attr/selectableItemBackground
to android:foreground
attribute of your button. Following xml is perfectly valid and works
<Button android:id="@+id/btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white" android:foreground="?attr/selectableItemBackground"/>
Don't change the background of Button. Change the theme.
<style name="ButtonGray"> <item name="colorButtonNormal">@color/gray</item></style>
and in your xml file
<Button android:id="@+id/accept_button" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_weight="1" android:text="@string/button_accept_group" android:theme="@style/ButtonGray"/>
Or you can add it in your main app theme
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorButtonNormal">@color/primary_color</item></style>
And don't need change button background.
If you want totally custom background you need create your selector. And you can set there ripple effect.