2011-05-08 97 views
5

我創建活動中的一個按鈕:如何擴展按鈕的樣式?

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等)。

但是我無法找到任何方法來繼承默認的按鈕樣式。上面的結果總是顯示爲默認的TextView。

我所得到的是通過按鈕樣式到按鈕的構造,這給我回默認按鈕的外觀,但我當然不能覆蓋這種方式最接近:

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,因爲我以編程方式創建按鈕,在XML中設置style屬性正常。

我還想知道是否有一個簡單的解決方法,它仍然允許我使用樣式系統。

+0

您是否嘗試過從XML擴展按鈕而不是實用地創建它? – schwiz 2011-05-09 00:55:32

+0

您是否找到解決方案? – 2015-08-25 21:25:51

回答

-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(); 
} 
+0

是直接修改按鈕實例確實有效,但我希望使用樣式系統來保持它很好地分離。 – Anotherdroid 2011-05-08 23:05:38