web-dev-qa-db-fra.com

getResources (). getColor () est obsolète

Utilisation de: buildToolsVersion "22.0.1", targetSdkVersion 22 dans mon fichier de notation.

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

Que devrais-je utiliser à la place?

335
David

Il semble que la meilleure approche consiste à utiliser:

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

par exemple:

yourView.setBackgroundColor(ContextCompat.getColor(applicationContext,
                            R.color.colorAccent))

Cela choisira la méthode à deux paramètres Marshmallow ou la méthode antérieure à Marshmallow de manière appropriée.

781
Barry Irvine

eh bien, il est obsolète dans Android M, vous devez donc créer une exception pour Android M et les versions antérieures. Ajoutez simplement le thème en cours sur la fonction getColor. Vous pouvez obtenir le thème actuel avec getTheme().

Cela fera l'affaire en fragment, vous pouvez remplacer getActivity() par getBaseContext(), yourContext, etc., qui contiennent 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: couleur est déconseillée dans M, mais drawable est déconseillée dans L

44
yfsx

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

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

Comme indiqué dans la documentation, "À partir de M, la couleur renvoyée sera stylée pour le thème du contexte spécifié". SO plus besoin de vous en soucier.

Vous pouvez ajouter la bibliothèque Support V4 en ajoutant les éléments suivants au tableau des dépendances au sein de votre application build.gradle:

compile 'com.Android.support:support-v4:23.0.1'
28
Maheshwar Ligade

J'ai trouvé que le getResources () utile. GetColor (R.color.color_name) est obsolète.

Il n’est pas obsolète dans l’API Niveau 21, selon la documentation .

Il est déconseillé dans l'aperçu du développeur M. Cependant, la méthode de remplacement (un getColor() à deux paramètres qui prend l'ID de ressource de couleur et un objet Resources.Theme) est uniquement disponible dans l'aperçu du développeur M.

Par conséquent, continuez maintenant à utiliser la méthode à paramètre unique getColor(). Plus tard cette année, envisagez l’utilisation de la méthode getColor() à deux paramètres sur les appareils Android, pour revenir à la méthode dépréciée à un seul paramètre getColor() sur les appareils plus anciens.

20
CommonsWare