web-dev-qa-db-fra.com

Android: Alternative pour context.getDrawable ()

J'ai utilisé context.getDrawable() comme ceci dans mon projet:

Drawable greenProgressbar = context.getDrawable(R.drawable.custom_progressbargreen);

Mais Eclipse me signale qu’il faut un Minimum API level of 21. Cela voudrait dire qu'après une recherche rapide sur Google, mon application ne sera utilisable que sur Android 5.0. Étant donné que tous les appareils n'utilisent pas cette version d'Android, j'aimerais disposer d'une alternative à context.getDrawable().

67
Bram

La méthode précédemment acceptée est obsolète, selon la documentation du SDK 22: 

Avant Android.os.Build.VERSION_CODES # JELLY_BEAN, cette fonction ne permettait pas d'extraire correctement la densité de configuration finale lorsque l'ID de ressource transmis ici est un alias d'une autre ressource Drawable. Cela signifie que si la configuration de densité de la ressource alias est différente de la ressource réelle, la densité de la valeur Drawable renvoyée serait incorrecte, ce qui entraînerait une mauvaise mise à l'échelle.

Comme indiqué dans cette réponse une meilleure solution consisterait à utiliser ContextCompat : ContextCompat.getDrawable(context, R.drawable.***)

174
user2417480

Essayez d'ajouter une getResources() après le contexte, alors ceci:

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

devrait marcher.

23
glm9637

Dans une situation similaire, je voulais faire référence à la méthode getDrawable (), qui est maintenant obsolète.

ce que j'ai utilisé,

myButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_btn_off));

J'espère que ceci vous aidera

9
Umanda

J'ai eu un problème similaire avant. Avez-vous essayé de le faire comme ça?

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);
8
user4423334

Vous devriez utiliser "getDrawable (id, this.getTheme ())". Cette méthode n'est pas obsolète jusqu'à maintenant.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
    view.setBackground(getResources().getDrawable(R.drawable.radioline,this.getTheme()));
} else {
   view.setBackground(getResources().getDrawable(R.drawable.radioline));
}
0
Maulik Baraiya

Je suis d'accord pour utiliser ContextCompact.getDrawable (contexte de contexte, int resID). Cela a fonctionné pour moi et mes cibles d'application API 19.

0