2017-03-01 17 views
0

レイアウトに背景色を設定したいと思います。 問題はそれが私に与えます:第2引数型エラー

間違った第2引数型です。必要なint。 私はちょうど

//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)); 
     } 

何が間違っているR.color.redcolor variableに変更しますか?の解き方?

+0

color ir sharedpreferencesで取得する変数です。それは赤、青...ですが、色を設定するにはstyle.xmlの 'R.color.red'でその参照が必要です.R.color.redを置くと問題になりますが、そこではdinamicの色を渡す必要があります。 –

+0

申し訳ありませんが、私の間違い。私は答えを加えました、これがあなたのために働くかどうか私に教えてください。 – mt0s

答えて

2

ContextCompat.getColorは実際にタイプintのあるR.color.redのようなもの、を待っています。あなたは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)); 
} 

をあなたはcolorためXを取得する場合、あなたはまた、のような名前の色を持っていることを確認してください:

あなたはこのような何かを行う必要がありますなぜあなたは文字列を保存カント <color name="X">#000000</color>

+0

友人に感謝!私が試してみます! –

+0

もう一度ありがとう!さらにもう1つの質問ですが、これを 'setTheme(colorId);でも使用できますか?私は同じことを使う必要がありますが、r.colorではなく 'R.style.Yellow'を使ってテーマを変更する必要があります。 –

+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

True! 'ContextCompat.getColor()'を使用してください - 私の答えを変更させてください – mt0s

1

代わりに色の値ですか?共有嗜好に

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

保存このため、値がrl.setBackgroundColor(Color.parseColor(カラー))を共有優先String color = pref.getString("color", null); からフェッチ一部#123456 あろう。

関連する問題