Question getColor (int id) déconseillé sur Android 6.0 Marshmallow (API 23)


le Resources.getColor(int id) méthode a été dépréciée.

@ColorInt
@Deprecated
public int getColor(@ColorRes int id) throws NotFoundException {
    return getColor(id, null);
}

Que devrais-je faire?


574
2017-07-23 14:44


origine


Réponses:


À partir de la bibliothèque de support Android 23,
un nouveau getColor () la méthode a été ajoutée à ContextCompat.

Sa description du JavaDoc officiel:

Renvoie une couleur associée à un ID de ressource particulier

À partir de M, la couleur renvoyée sera stylisée pour le thème du contexte spécifié.


Alors, il suffit d'appeler:

ContextCompat.getColor(context, R.color.your_color);


Vous pouvez vérifier la ContextCompat.getColor()  code source sur GitHub.


1151
2017-07-23 14:52



tl; dr:

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

Explication:

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

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

Si vous n'utilisez pas déjà la bibliothèque de support, vous devrez ajouter la ligne suivante à dependencies tableau à l'intérieur de votre application build.gradle (Remarque: c'est facultatif si vous utilisez déjà la bibliothèque appcompat (V7)):

compile 'com.android.support:support-v4:23.0.0' # or any version above

Si vous vous intéressez aux thèmes, la documentation spécifie que:

À partir de M, la couleur retournée sera stylée pour le   Thème du contexte


423
2017-08-21 21:08



Je ne veux pas inclure la bibliothèque de support pour getColor, donc j'utilise quelque chose comme

public static int getColorWrapper(Context context, int id) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        return context.getColor(id);
    } else {
        //noinspection deprecation
        return context.getResources().getColor(id);
    }
}

Je suppose que le code devrait fonctionner très bien, et le déconseillé getColor ne peut pas disparaître de l'API <23.


36
2017-09-11 12:29



Dans Android Marshmallow, de nombreuses méthodes sont obsolètes.

Par exemple, pour obtenir l'utilisation de la couleur

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

Aussi pour obtenir une utilisation drawable

ContextCompat.getDrawable(context, R.drawable.drawble_name);

28
2017-08-28 05:07



Pour dessiner

ContextCompat.getDrawable(getApplicationContext(),R.drawable.back_arrow)

Pour la couleur

 ContextCompat.getColor(getApplicationContext(),R.color.red)

15
2018-01-12 09:56



Vous pouvez utiliser:

if (Build.VERSION.SDK_INT >= 23) {
    return ctx.getColor(R.color.YOURCOLOR);
} else {
    return ctx.getRecources().getColor(R.color.YOURCOLOR);
}

Testé sur Android Marshmallow. Ça a marché.


8
2017-08-27 18:25



La réponse la plus courte est:

ContextCompat.getColor(context, R.color.colorAccent);

7
2017-07-28 05:33



La méthode getColor () est déconseillée dans l'API 23 et introduite dans ContextCompat. Avant d'utiliser la méthode getColor () à l'aide de ContextCompat, ajoutez les dépendances dans le script build.gradle, à savoir:

dependencies{

    // Other stuff

    compile 'com.android.support:support-v4:23.0.0'
}

Ensuite, la méthode getColor () peut être utilisée comme:

int colorcode = ContextCompat.getColor(getApplicationContext(), R.color.your_color);

7
2017-10-05 10:12



Utilisez ceci:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    return context.getResources().getColor(id, context.getTheme());
} else {
    return context.getResources().getColor(id);
}

3
2018-01-09 07:08