2012-07-23 3 views
3

Je suis en train de mettre l'arrière-plan d'une mise en page très simple:Pourquoi R.color.white ne fonctionne pas avec Color.WHITE?

LinearLayout ll = (LinearLayout) findViewById(R.id.simple_layout); 

Cela fonctionne:

ll.setBackgroundColor(Color.WHITE); 

Mais cela ne:

ll.setBackgroundColor(R.color.white); 

Et oui, je vérifié que R.color.white est défini dans un fichier colors.xml sous /res/values.

Qu'est-ce qui me manque?

+1

qu'est-ce que R.color.white a défini comme? –

+0

@ Dr.Dredel ' # FFFFFF' mais j'ai déjà trouvé la racine du problème. Voir ci-dessous et je l'accepterai dans 5 minutes. –

+0

Si vous utilisez Eclipse, assurez-vous que la dernière version d'ADT est installée. Le plugin Lint va effectivement marquer cela comme une erreur. – Michael

Répondre

5

Vous devez utiliser ll.setBackgroundResource(R.color.white)

+4

Vous avez raison. J'ai oublié la distinction entre la valeur de couleur et l'identifiant de ressource de couleur. Parfois, je pouvais être si aveugle ... et le compilateur ne s'en plaignait pas parce qu'ils étaient tous les deux 'int'. Une autre méthode consiste à convertir la ressource en couleur: 'getResources(). GetColor (int);' –

+0

Ici, dans le futur, nous utilisons 'ContextCompat.getColor (context, R.color.white)' – GabrielOshiro

1

Comme @Ali souligne quand vous l'avez mis en XML, il devient une ressource. C'est très déroutant, évidemment, parce que vous ne le considérez pas comme une ressource, vous le considérez comme une valeur. Mais comme toutes les autres ressources, c'est une ressource. Donc oui, vous devez utiliser setBackgroundResource()

Questions connexes