如何扩展Android按钮并使用xml布局文件

如何扩展Android按钮并使用xml布局文件,android,button,Android,Button,我试图扩展android button类,并让它使用xml布局文件 我想使用xml布局文件的原因是我的按钮需要使用样式,而据我所知,没有一种方法可以通过编程设置样式 公共类BuyButton扩展按钮{…} 并让它创建一个应用了样式的按钮 (我也愿意用其他方法获得相同的结果)创建一个扩展按钮的类 public class BuyButton extends Button { public BuyButton(Context context, AttributeSet attrs) {

我试图扩展android button类,并让它使用xml布局文件

我想使用xml布局文件的原因是我的按钮需要使用样式,而据我所知,没有一种方法可以通过编程设置样式

公共类BuyButton扩展按钮{…}

并让它创建一个应用了样式的按钮


(我也愿意用其他方法获得相同的结果)

创建一个扩展
按钮的类

public class BuyButton extends Button {

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

}
在您的XML引用中,可以直接使用该自定义类

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

请参见本节。只需设置一个自定义背景绘图。

在布局中。xml对控件类型进行一行更改(从按钮更改为自定义按钮类型)即可解决您的强制转换问题

对于子类BuyButton,请在.xml中找到按钮的部分;它可能看起来像这样:

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

并将其更改为:

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


我无法进行自定义背景绘制。这一定是一种风格。我遇到了一个运行时错误。它在抱怨xml。04-20 16:30:19.852:E/AndroidRuntime(18583):android.view.InflateException:二进制XML文件行#2:对类client.views.buttons.BuyButtonView进行膨胀时出错谢谢!谢谢你!谢谢你!完美答案!此外-必须有一个构造函数在您的子类,将允许通货膨胀;您也可以创建具有不同签名的其他构造函数,但是必须在子类中定义使用上下文和属性参数的基本构造函数。见:
<Button
            android:id="@+id/btnBuy"
            android:layout_width="188dp"
            android:layout_height="70dp"
            android:padding="12dp"
            android:text="Buy" />
<yourpackage.name.BuyButton
            android:id="@+id/btnBuy"
            android:layout_width="188dp"
            android:layout_height="70dp"
            android:padding="12dp"
            android:text="Buy" />