Home » Android » How to extend an Android button and use an xml layout file

How to extend an Android button and use an xml layout file

Posted by: admin June 15, 2020 Leave a comment

Questions:

I’m trying to extend the android button class and have it use an xml layout file.

The reason I want to use an xml layout file is that my button needs to use a style and as far as I know, there isn’t a way to set style programatically.

public class BuyButton extends Button { … }

<?xml version="1.0" encoding="utf-8"?>  
<Button 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    style="@style/customButton"
/>

so that I can call:

new BuyButton(activity);

and have it create a button that has the style applied to it.

(I’m also open to other ways of getting the same result)

How to&Answers:

Create a class that extends Button.

public class BuyButton extends Button {

    public BuyButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

}

In your XML reference that custom class directly.

<?xml version="1.0" encoding="utf-8"?>  
<your.package.name.BuyButton 
xmlns:android="http://schemas.android.com/apk/res/android" 
style="@style/customButton"/>

Answer:

In your layout .xml a one line change to the control type (change from Button to your custom button type ) will solve your casting problem.

For your subclassed BuyButton, find the button’s section in .xml; it may look something like this:

<Button
            android:id="@+id/btnBuy"
            android:layout_width="188dp"
            android:layout_height="70dp"
            android:padding="12dp"
            android:text="Buy" />

and change it to this :

<yourpackage.name.BuyButton
            android:id="@+id/btnBuy"
            android:layout_width="188dp"
            android:layout_height="70dp"
            android:padding="12dp"
            android:text="Buy" />

Answer:

See the Button Style section. Just set a custom background drawable.