2017-03-01 106 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(颜色));

相关问题