2011-02-19 59 views
19

我有一個名爲紅色和綠色的樣式,我有一個if語句來找出哪個應用,但我不知道代碼實際上是從java應用樣式。如何以編程方式應用樣式?

+6

精確複製:http://stackoverflow.com/questions/2016249/how-to-programmatically-setting-style-attribute-在查看,http://stackoverflow.com/questions/3246447/how-to-set-the-style-attribute-programmatically-in-android等。請先搜索,然後再詢問 –

+0

檢查此鏈接。 http://www.anddev.org/view-layout-resource-problems-f27/how-to-programmatically-set-button-style-t8656.html這應該有幫助 –

回答

5

我發現這隻能在從Java內部創建視圖時才能完成。如果事先在XML中定義它,則不能動態更改樣式。

+5

這是如何回答你自己的問題? –

12

使用setTextAppearance(context,resid)方法,可以將樣式以編程方式應用於TextView。 (風格的resId可以在R.style.YourStyleName中找到)

31

這個問題沒有一種解決方案,但是這對我的用例起作用。問題是,'View(context,attrs,defStyle)'的構造函數沒有引用實際的樣式,它需要一個屬性。因此,我們將:

  1. 定義屬性
  2. 創建要使用
  3. 應用樣式該屬性對我們的主題
  4. 與屬性
  5. 創建我們認爲新的實例風格

在 'RES /值/ attrs.xml',定義一個新的屬性:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="customTextViewStyle" format="reference"/> 
    ... 
</resources>  

在RES /價值/ styles.xml '我要創造我想在我的自定義的TextView使用的樣式

<style name="CustomTextView"> 
    <item name="android:textSize">18sp</item> 
    <item name="android:textColor">@color/white</item> 
    <item name="android:paddingLeft">14dp</item> 
</style> 

在 'RES /價值/的themes.xml' 或' RES /價值/ styles.xml」,修改爲您的應用程序/活動主題,並添加以下樣式:

<resources> 
    <style name="AppBaseTheme" parent="android:Theme.Light"> 
     <item name="@attr/customTextViewStyle">@style/CustomTextView</item> 
    </style> 
    ... 
</resources> 

最後,在自定義的TextView,你現在可以使用構造與屬性,它會收到您的風格。在這裏,而不是總是

public class CustomTextView extends TextView { 

    public CustomTextView(Context context, int styleAttribute) { 
     super(context, null, styleAttribute); 
    } 

    // You could also just apply your default style if none is given 
    public CustomTextView(Context context) { 
     super(context, null, R.attr.customTextViewStyle); 
    } 
} 

所有這些組件,你現在可以做一個if/else語句在運行時生成的風格新的觀點,你更喜歡

CustomTextView ctv; 
if(useCustomStyles == true){ 
    ctv = new CustomTextView(context, R.attr.customTextViewStyle); 
}else{ 
    ctv = new CustomTextView(context, R.attr.someOtherStyle); 
} 

值得一提的是,我在不同的變體和不同的地方重複使用customTextView,但絕不要求視圖的名稱與樣式或屬性或任何內容相匹配。此外,這種技術應該適用於任何自定義視圖,而不僅僅是TextView。

+0

對於我使用'>'沒有工作,我不得不刪除'@ attr'以使其工作,所以它只是'' – virhonestum

0

把這段代碼

super.setStyle(R.style.yourownstyle) 

之前的setContentView()中的onCreate

相關問題