web-dev-qa-db-fra.com

Couleur résolue au lieu d'un identifiant de ressource

Récemment, j'ai vu apparaître une erreur de peluche dans mon code:

Devrait passer la couleur résolue au lieu de l'ID de ressource ici: getResources (). GetColor (R.color.maps_list_background_color)
MyClass.Java/myapp/Android/maps ligne 107 Android Problème de peluches

Je sais comment le résoudre, la réponse est dans l'erreur, le problème est que je ne comprends pas pourquoi ils ont ajouté cette erreur dans le linter.

40
Leoz

Les méthodes qui prennent une couleur sous la forme d'un entier doivent recevoir un triple RVB, et non l'ID de ressource de couleur réelle. Vous devez appeler getResources.getColor (ressource).

La fonction que vous appelez attend un entier qui est un triple RVB, pas seulement l'id d'une ressource couleur. L'ID de ressource de couleur est toujours un entier, mais ne produirait pas la couleur que vous attendez s'il était utilisé comme triple RVB. Afin de lui passer le triple RVB correct pour votre couleur, vous devez le résoudre avec l'appel getResources().getColor(R.color.example_color).

45
ter0

Étant donné que je trouve toujours cela sur Google et qu'il est obsolète, je pensais que je pourrais aussi bien partager la méthode actuelle de le faire.

check getResources (). getColor () est déconseillé

ContextCompat.getColor(context, R.color.color_name)
40

Utiliser l'annotation @ColorInt pour confirmer qu'il s'agit d'une couleur et non d'un identifiant de référence de couleur.

Voir: Android.support.annotation.ColorInt

6
Maher Abuthraa

Puisque getResources().getColor() est obsolète, vous devez le faire pour obtenir la couleur:

int color = ContextCompat.getColor(getContext(),your_color_id);

Vous avez maintenant la couleur par rapport au contexte actuel Définissez la couleur en utilisant:

your_view.setBackgroundColor(color);
5
MistNewt

Quant à moi, c'est un avertissement très stupide.

J'ai ma propre classe avec fonction:

public static final void setBackgroundColor(View v, int id) {
// Here I get color by id from resources and setBackgroundColor of this color.
}

Quoi qu'il en soit, si j'essaie d'appeler setBackgroundColor, je reçois un avertissement. Mais pourquoi?

J'ai donc fait simple: renommer setBackgroundColor en setBackgroundColorr.

Cet avertissement s'active si le nom trouvé color au nom de la fonction.

Et oui, je n'aime pas le nom setColorBackground ou tout autre :-)

4
Yura Shinkarev