2012-03-16 125 views
0

中工作我在我的Android應用程序中與一個非常奇怪的行爲打架。我有一個TextView,其中背景和文本的顏色是根據某些條件動態設置的。爲了簡化,某些條件覈對錯誤,並且顏色被以這種方式文本視圖設置(注意,文本視圖添加到所述幀佈局具有背景顏色設置爲@android:color/black):當從XML設置時顏色設置不正確 - 在代碼

TextView tv = new TextView(this); 
((FrameLayout)this.findViewById(R.id.text_frame)).add(tv); 

String val = getValue(); 
tv.setText(val); 

if(isError(val)) { 
    tv.setBackGroundColor(R.color.bg_error); 
    tv.setTextColor(R.color.txt_error); 
} 
else { 
    tv.setBackGroundColor(R.color.bg_normal); 
    tv.setTextColor(R.color.txt_normal); 
} 

顏色以XML定義,像這樣:

<color name="bg_normal">#ffffff</color> 
<color name="bg_error">#ff0000</color> 
<color name="txt_normal">#0000ff</color> 
<color name="txt_error">#008080</color> 

沒想到什麼奇怪這段代碼的,正如我以前多次使用的類似的東西。但是在這種情況下,這段代碼不起作用。無論我嘗試什麼,文本視圖的文本和背景的顏色都是黑色的。

現在,如果我將我的代碼更改爲以下內容,則一切正常。

if(isError(val)) { 
    tv.setBackGroundColor(Color.rgb(255, 0, 0)); 
    tv.setTextColor(Color.rgb(0, 128, 128)); 
} 
else { 
    tv.setBackGroundColor(Color.rgb(255, 255, 255)); 
    tv.setTextColor(Color.rgb(0, 0, 255); 
} 

雖然我當然可以,把它像這樣(它的工作原理 - 爲什麼解決這個問題),我寧願得到XML的顏色,因爲它會這麼容易維護和以後修改。

有沒有人有任何想法,問題可能是什麼,以及如何解決它?

P.S.我將優先考慮使用XML創建文本視圖的建議,並通過說這是一個簡化的代碼來設置它的顏色。有很多像這樣動態創建的文本視圖,其編號取決於外部參數。在編碼時,我不知道是否有1個這樣的文本視圖或100個。

回答

3

setBackgroundColor()需要在int內編碼的顏色。您提供的資源ID,雖然,這會產生錯誤的/不同results.¹

而得到的資源編碼這樣的顏色:

tv.setBackGroundColor(getResources().getColor(R.color.bg_normal)); 

¹考慮到的是,你必須跳閘怪異的設計其他資源設置者也採用int,對於res id幾乎一致。這是一個特例。 :)

+0

該死!我認爲你是對的!讓我試試這個 - 我會盡快回復你。 – 2012-03-16 09:40:54

+0

很好地抓住了... 1了 – akkilis 2012-03-16 09:58:10

+0

是的,就是這樣!我討厭那樣的愚蠢錯誤!非常感謝。 – 2012-03-16 10:55:54