getResources().getColor () est déprécié [dupliquer]

cette question a déjà une réponse ici:

à l'Aide de: buildToolsVersion "22.0.1" , targetSdkVersion 22 dans mon dossier gradle.

j'ai trouvé que l'utile getResources().getColor(R.color.color_name) est obsolète.

Que devrais-je utiliser à la place?

279
demandé sur David 2015-08-06 00:16:19

4 réponses

Il semble que la meilleure approche est d'utiliser:

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

on choisira de façon appropriée la méthode à deux paramètres de la guimauve ou la méthode de la pré-Guimauve.

678
répondu Barry Irvine 2015-08-25 11:00:03

Eh bien, il est déprécié dans android M donc vous devez faire exception pour android M et inférieur. Il suffit d'ajouter le thème actuel sur la fonction getColor . Vous pouvez obtenir le thème actuel avec getTheme() .

cela fera l'affaire dans fragment, vous pouvez remplacer getActivity() par getBaseContext() , yourContext , etc qui tiennent votre contexte actuel

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    yourTitle.setTextColor(getActivity().getResources().getColor(android.R.color.white, getActivity().getTheme()));
}else {
    yourTitle.setTextColor(getActivity().getResources().getColor(android.R.color.white));
}

*p. s: la couleur est dépréciée en M, mais le dessin est déprécié en l

31
répondu yfsx 2016-11-05 18:04:04

vous devez utiliser ContextCompat.getColor (), qui fait partie de la bibliothèque de Support V4 (donc cela fonctionnera pour toutes les API précédentes).

ContextCompat.getColor(context, R.color.my_color)

comme spécifié dans la documentation,"à partir de M, la couleur renvoyée sera stylisée pour le thème du contexte spécifié". DONC pas besoin de s'inquiéter à ce sujet.

vous pouvez ajouter la bibliothèque de soutien V4 en ajoutant ce qui suit Au Tableau de dépendances à l'intérieur de votre construction d'application.gradle:

compile 'com.android.support:support-v4:23.0.1'
23
répondu Maheshwar Ligade 2015-09-11 07:53:02

j'ai trouvé que le getresources utile().getColor(R. de couleur.color_name) est obsolète.

il n'est pas déprécié dans le niveau API 21, selon la documentation .

Il est obsolète dans le M Developer Preview. Cependant, la méthode de remplacement (un double paramètre getColor() qui prend L'ID de la ressource couleur et un objet Resources.Theme ) n'est disponible qu'en L'aperçu du développeur M.

donc, en ce moment, continuer à utiliser le paramètre unique getColor() méthode. Plus tard cette année, envisager d'utiliser la méthode à deux paramètres getColor() sur les appareils Android M, retombant à la méthode à un seul paramètre dépréciée getColor() sur les appareils plus anciens.

20
répondu CommonsWare 2015-08-05 21:21:42