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

9
我正在尝试扩展Android按钮类并使用XML布局文件。
我之所以想使用XML布局文件是因为我的按钮需要使用样式,据我所知,没有办法通过编程方式设置样式。
代码如下:

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

这样我就可以调用:

new BuyButton(activity);

并让它创建一个应用了该样式的按钮。
(我也愿意尝试其他方式来达到相同的效果)
3个回答

15
创建一个继承自 Button 的类。
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"/>

2
我遇到了一个运行时错误。它在抱怨XML文件。04-20 16:30:19.852: E/AndroidRuntime(18583): android.view.InflateException: Binary XML file line #2: Error inflating class client.views.buttons.BuyButtonView - ajma

1
在您的layout.xml中,将控件类型从Button更改为您自定义的按钮类型,仅需要一行代码即可解决转换问题。
对于您的子类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" />

此外,您的子类必须具有构造函数以允许膨胀;您还可以创建其他具有不同签名的构造函数,但是以上下文和属性参数为基础的基本构造函数必须在您的子类中定义。请参见:https://sholtz9421.wordpress.com/2012/03/22/correct-way-to-subclass-android-views/ - Joe Seibert

-1
请查看按钮样式部分。只需设置自定义背景可绘制即可。

1
我无法创建自定义的背景可绘制对象,它必须是一个样式。 - ajma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接