2011-01-17 11 views
3

Ich bin ein relativ neuer Android-Entwickler und ich bemerkte, was für mich eine Merkwürdigkeit scheint, dass ich hoffe, dass jemand erklären kann. Ich habe LinearLayout II.Ändern der Farbe mit LinearLayout und TextView in Java (Android)

Diese Codezeile für mich nicht, wenn sie ausgeführt:

ll.setBackgroundColor(R.color.white); 

jedoch diese Zeile Code funktioniert:

ll.setBackgroundResource(R.color.white); 

Ich nehme an seine einfach, weil ich weiß in meine Ressourcen definiert haben. Ich habe jedoch auch versucht, 0xFFFFFF in SetBackgroundColor() übergeben und das funktioniert auch nicht.

Ähnlich ist es mit meinem Textview Text dieser Codezeile schlägt fehl, wenn ausgeführt:

text.setTextColor(R.color.white); 

ich meine Textview sehen Ich weiß, ich initialisiert es so richtig (wie mein Linearlayout, das ich auch sehen kann). Also meine Frage läuft auf: Wie benutze ich LinearLayout.setBackgroundColor() und TextView.setTextColor()?

Vielen Dank im Voraus. Ich habe die Dokumente gelesen und versucht, online Informationen über Google zu finden, und habe mir nichts einfallen lassen.

Antwort

4

R.color.whatever ist ein Int. Es wird automatisch als Referenz auf eine extern definierte Ressource (in XML) generiert. Wenn Sie setBackgroundColor mit dieser Ganzzahl aufrufen, versucht es den Wert dieses Int als einen Color zu analysieren. setBackgroundResource erwartet, dass eine Ressourcen-Ganzzahl an ihn übergeben wird. Es ruft den extern definierten Wert ab und wendet dann die Farbe auf diese Weise an. Versuchen Sie für setBackgroundColor eine vollständige Hex-Wert-Farbe mit Alpha enthalten, z. 0xFFFFFFFF (wobei die ersten beiden F-Werte der Alpha-Wert sind).

EDIT: Von Mark geschlagen! : P

+0

Ihre Lösung, das Alpha-Byte hinzuzufügen, hat funktioniert, vielen Dank :) Marks Lösung Ich bin sicher, dass es funktionieren würde, aber er gab mir nicht genügend Informationen, um es zu verwenden. Vielen Dank für beide Informationen, es hat mir sehr geholfen :) –

+3

Ich bin froh zu helfen! Um Ihren Kommentar zu Marks Lösung zu beantworten, ist Color nur ein Standard-Android-Import. Wenn Sie in Eclipse sind, drücken Sie einfach Strg + Shift + O, um den Import hinzuzufügen, oder wenn Sie es manuell möchten, ist es 'import android.graphics.Color;' – kcoppock

+0

Vielen Dank :) –

16

Rob,

Das Problem ist, dass setBackgroundColor() für ein Farbobjekt sucht. So etwas wie die Zeile unter

ll.setBackgroundColor(Color.WHITE); 

oder

ll.setBackgroundColor(Color.parseColor("#ffffff")); 

während setBackgroundResource sucht für eine Ressource als Hintergrund zu verwenden, das heißt etwas in Ihrem res Ordner verwenden müßte. Sie könnten damit den Hintergrund auf ein Zeichen oder etwas in dieser Art setzen.

ll.setBackgroundResource(R.something.mydrawable); 
+0

Was muss ich importieren in Um Farbe zu verwenden? Vielen Dank! –

1

In meinem Fall musste ich sowohl Color-Ints als auch Colors in einer Ressource definiert verwenden. Obwohl sie beide Ganzzahlen waren, mussten sie ein bestimmtes Format haben, um mit setBackgroundColor (int colorInt) und setBackgroundResource (int resourceIdOfColor) zu arbeiten.

I verwendet:

int colorInt = getResources().getColor(R.color.resourceIdOfColor) 

die resids im Format einer Farbe int zu bekommen, so könnte ich setBackgroundColor überall benutzen.


Sie Anmerkungen zwischen den beiden in Ihrem eigenen Code unterscheiden können:

@ColorInt 
private int getColor(@ColorRes int id) { 
    return getResources().getColor(id); 
} 

Die Android Framework-APIs kommentierten bereits werden sollten:

public void setBackgroundResource(@DrawableResource int id); 
public void setBackgroundColor(@ColorInt int color); 
Verwandte Themen