我正在活动中创建一个按钮:
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
属性可以正常工作。
我仍然想知道是否有一个简单的解决方法仍然允许我使用样式系统。
答案 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();
}