2017-03-01 4 views
0

Ich möchte eine Hintergrundfarbe für mein Layout festlegen. Das Problem ist es gibt mir:zweiter Argumenttyp Fehler

Falsche 2. Argument Typ. benötigt int. Ich wechsle nur R.color.red-color 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)); 
     } 

, was falsch ist? wie löst man?

+0

color ir eine Variable, die ich in geteilten Präferenzen bekomme. es ist rot, blau ... aber um die Farbe zu setzen, brauche ich eine Referenz in style.xml 'R.color.red' Das Problem ist, wenn ich R.color.red setze, funktioniert es, aber ich muss dort eine dynamische Farbe übergeben . –

+0

Sorry, mein Fehler. Ich habe eine Antwort hinzugefügt, lassen Sie mich wissen, ob das für Sie funktioniert. – mt0s

Antwort

2

ContextCompat.getColor warten auf so etwas wie R.color.red, die int tatsächlich vom Typ ist. Du passierst eine String und das ist natürlich falsch.

Sie sollten etwas tun:

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

Stellen Sie außerdem sicher, dass, wenn Sie X für color bekommen, können Sie auch eine Farbe namens haben wie: <color name="X">#000000</color>

+0

danke Freund! Ich werde es versuchen! –

+0

danke nochmal! nur noch eine Frage, kann ich das auch verwenden, um'Theme (colorId) 'zu setzen? Ich muss das selbe verwenden, aber jetzt ändere ich das Thema mit 'R.style.Yellow' und nicht mit r.color. –

+1

@RickJoe, ja, du wirst etwas wie 'this.getResources() machen müssen. GetIdentifier (styleNameString," style ", this.getPackageName())' –

1

color sollte int sein.

So Ihren Code ändern:

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

oh, aber getColor ist veraltet? –

+1

Wahr! Verwenden Sie 'ContextCompat.getColor()' dann - lassen Sie mich meine Antwort ändern – mt0s

1

Warum kann man den String speichern Wert für die Farbe stattdessen?

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

speichern auf gemeinsame Vorlieben, so dass der Wert etwas # 123456 sein holen Dann ist es aus dem gemeinsamen Vorliebe String color = pref.getString("color", null); dann rl.setBackgroundColor (Color.parseColor (Farbe));

Verwandte Themen