如何扩展按钮的样式?

时间:2011-05-08 22:59:27

标签: android

我正在活动中创建一个按钮:

Button contactButton = new Button(this, null, R.style.ContactButton);
contactButton.setText(contactName);
contactsView.addView(contactButton);

具有相应的风格:

<style name="ContactButton" parent="@android:style/Widget.Button"> 
</style>

我试图让它使用ContactButton样式,扩展Widget.Button样式,这样我就可以将样式属性保存在一个地方,而无需重新定义整个按钮(9-patch background et al。)< / p>

但是我找不到任何继承默认按钮样式的方法。上面的结果似乎总是默认的TextView。

我最接近的是将buttonStyle传递给Button构造函数,它给了我默认的按钮外观,但当然我无法以这种方式覆盖它:

Button contactButton = new Button(this, null, android.R.attr.buttonStyle);

那么,任何想法如何实现这个目标?

更新

这似乎是bug in the View class,它解释了为什么new Button(this, null, android.R.attr.buttonStyle)有效而new Button(this, null, android.R.style.Widget_Button)没有用,虽然前者只是对后者的引用。

我只是遇到了这个bug,因为我正在以编程方式创建Buttons,设置XML中的style属性可以正常工作。

我仍然想知道是否有一个简单的解决方法仍然允许我使用样式系统。

1 个答案:

答案 0 :(得分:-1)

您是否可以创建工厂类并让它返回重新定义对象的新实例?

Class ButtonFactory(){
    public Button getStyledButton(String name){
        Button styledButton = new Button();
        styledButton.setText(name);
        // do stuff to button
        return styledButton
    }
}

在您的活动中添加此内容。

onCreate(..){
   ButtonFactory builder = new ButtonFactory();
   Button styledButton = builder.getStyledButton();
}