2016-04-04 272 views
3

我想在這樣的RecylerView的Bindview持有者中動態地更改Cardview背景顏色。Cardview設置背景顏色

holder.cardView.setCardBackgroundColor(R.color.LightCyan); 

奇怪的是後臺應用幾乎相反的應用的顏色。(#E0FFFF-淺青綠),以1F0000 -Almost黑色)

我曾在這裏驗證幾種顏色here,其結果是相同。

但如果我這樣設置

holder.cardView.setCardBackgroundColor(ContextCompat.getColor(this.mContext, R.color.LightCyan)); 

它完美地工作。(是的,它是設置正確的方式)。

CardView XML:

<android.support.v7.widget.CardView 
    android:id="@+id/cv" 
    android:foreground="?selectableItemBackground" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

OS:在Android 6.0 HTC

但是,在這裏認識差距?

+1

[這是你的差距(http://developer.android.com/intl/es/reference/android/support/v4/content/ContextCompat.html) – Aks4125

回答

4

方法setCardBackgroundColor採用顏色參數,即ARGB格式表示爲4字節整數的顏色,但是您將傳入方法R.color.LightCyan,該方法不是顏色,而是應用程序/系統資源中的顏色索引。要獲得顏色,您應該使用Color.argb(int alpha, int red, int green, int blue)Resources.getColor(int index, Theme theme)或使用ContextCompat在較舊的平臺上使用它。

+0

明白了。謝謝(你的)信息。 –

+0

我使用硬編碼的顏色進行測試,但我不知道alpha因素是強制性的。我將'card.setCardBackgroundColor(0xFF0000)'改成了'card.setCardBackgroundColor(0xFFFF0000)',它工作。謝謝(你的)信息。 – Sunshinator

2

爲在更新對2016年3月

Android的支持庫23.2.1(最新的),一個新的getColor()方法已被添加到ContextCompat。

所以,使用:

ContextCompat.getColor(context, R.color.your_color); 

從官方文檔:

返回與特定資源ID相關聯和風格爲當前主題的顏色。

的getColor(上下文的背景下,INT ID)返回與 特定資源ID以M開始相關的顏色,返回的顏色將 風格爲指定的上下文的主題。

請檢查ContextCompat http://developer.android.com/intl/es/reference/android/support/v4/content/ContextCompat.html

+0

是的。我正在使用它。爲了好奇,我正在用其他方法測試。謝謝。 –