ajma
ajma

Reputation: 12206

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

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)

Upvotes: 9

Views: 20598

Answers (3)

Joe Seibert
Joe Seibert

Reputation: 11

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" />

Upvotes: 1

adneal
adneal

Reputation: 30804

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"/>

Upvotes: 15

David Suppiger
David Suppiger

Reputation: 91

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

Upvotes: -1

Related Questions