I am creating custom buttons in android but want to avoid repetition.
I'm trying to create 2 togglable buttons which share the same design but a different image icon instead of text.
Currently I have this:

And i'm using this xml as a drawable resource:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <item>
        <shape>
            <padding
                android:bottom="5dp"
                android:left="5dp"
                android:right="5dp"
                android:top="5dp" />
            <corners android:radius="20dp"/>
        </shape>
    </item>
    <item>
        <shape>
            <padding
                android:bottom="5dp"
                android:left="-5dp"
                android:right="5dp"
                android:top="-5dp" />
            <solid android:color="#edebeb"></solid>
            <corners android:radius="20dp"/>
        </shape>
    </item>
    <item>
        <shape>
            <size android:height="150dp" android:width="150dp"></size>
            <padding
                android:bottom="5dp"
                android:left="-5dp"
                android:right="5dp"
                android:top="-5dp" />
            <solid android:color="#fff"></solid>
            <corners android:radius="20dp"/>
        </shape>
    </item>
</layer-list>
How can I display a different image in the center of each button without duplicating the xml file?
Is there any way I can pass a value to each button in the .java file of my activity so that i can use it to show a different image for each button?
If you use an ImageView then you can set the icon as src and still use your drawable as the background:
 <ImageView ...
    android:src="@drawable/ic_whatever"
    android:background="@drawable/background" />
All views support onClick so it can still act as a button. Alternatively you can nest drawables so you can have the following for each different button style:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <item android:drawable="@drawable/ic_whatever" />
    <item android:drawable="@drawable/background" />
</layer-list>
The java version of what I suggested above (from an Activity):
public void onCreate(...) {
    ...
    ((ImageView) findViewById(R.id.my_button)).setImageResource(R.drawable.ic_whatver);
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With