2017-03-01 72 views
0

我想爲我的佈局設置背景顏色。 問題是它給了我:第二個參數類型錯誤

錯誤的第二個參數類型。需要int。 我只是改變R.color.redcolor variable

//add background color header 
     String color = pref.getString("color", null); 
     if(color != null) { 
      color = "R.color." + color; 
      LinearLayout rl = (LinearLayout) findViewById(R.id.menuHeader); 
      rl.setBackgroundColor(ContextCompat.getColor(this, color)); 
     } 

有什麼不好?怎麼解決?

+0

color ir是一個我在sharedpreferences中獲得的變量。它是紅色,藍色......但設置顏色我需要它在style.xml'R.color.red'中的引用問題是如果我把R.color.red它的作品,但我需要在那裏通過一個動態顏色。 –

+0

對不起,我的錯。我添加了一個答案,讓我知道這是否適合你。 – mt0s

回答

2

ContextCompat.getColor正在等待像R.color.red,這實際上是int類型。你傳遞的是String,這當然是錯誤的。

你應該做這樣的事情:

String color = pref.getString("color", null); 
if(color != null) { 
     int colorId = this.getResources().getIdentifier(color, "color", this.getPackageName()); 
     LinearLayout rl = (LinearLayout) findViewById(R.id.menuHeader); 
     rl.setBackgroundColor(ContextCompat.getColor(this, colorId)); 
} 

此外,還要確保你得到Xcolor,你也有一個顏色命名,如: <color name="X">#000000</color>

+0

謝謝你的朋友!我會盡力! –

+0

再次感謝你!還有一個問題,我可以使用它來'setTheme(colorId);'?我需要使用相同的東西,但現在使用'R.style.Yellow'而不是r.color來改變主題。 –

+1

@RickJoe,是的,你將不得不做類似'this.getResources()。getIdentifier(styleNameString,「style」,this.getPackageName())' –

1

color應該是int。

所以你的代碼更改爲:

String colorString = pref.getString("color", null); 
    if(colorString != null) { 
     colorString = "R.color." + colorString; 

     int myColor = ContextCompat.getColor(this, colorString); 

     LinearLayout rl = (LinearLayout) findViewById(R.id.menuHeader); 
     rl.setBackgroundColor(ContextCompat.getColor(this, myColor)); 
    } 
+0

哦,但getColor已棄用? –

+1

真的!使用'ContextCompat.getColor()'然後 - 讓我改變我的答案 – mt0s

1

你爲什麼不能保存字符串顏色的價值而不是?

String color = getResources().getString(R.color.red); 

保存此共享偏好,因此該值會有些#123456 然後從共享偏好String color = pref.getString("color", null);取它 然後rl.setBackgroundColor(Color.parseColor(顏色));

相關問題