Android, setting background color of button loses ripple effect Android, setting background color of button loses ripple effect android android

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.