Android getResources ().getDrawable() API obsolètes 22

avec la nouvelle API android 22 getResources().getDrawable() est maintenant déprécié. Maintenant la meilleure approche est d'utiliser seulement getDrawable() .

quel changement?

577
demandé sur MiguelHincapieC 2015-03-13 23:05:02

10 réponses

vous avez quelques options pour gérer cette dépréciation de la manière droite (et future proof ), en fonction du type de tirable que vous chargez:


A) un drawable avec "1519140920 thème" attributs

ContextCompat.getDrawable(getActivity(), R.drawable.name);

vous obtiendrez un dessin stylé selon le thème de votre activité. C'est probablement ce dont vous avez besoin.


B) un drawable sans "1519140920 thème" attributs

ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);

vous aurez votre dessin non moulé à l'ancienne. Veuillez noter: ResourcesCompat.getDrawable() est pas obsolète!


EXTRA) un drawable avec thème attributs de l'autre thème

ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);
819
répondu araks 2017-08-11 17:38:52

Edit: voir mon blog sur le sujet pour une explication plus complète


vous devez utiliser le code suivant de la bibliothèque de soutien à la place:

ContextCompat.getDrawable(context, R.drawable.***)

utiliser cette méthode équivaut à appeler:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    return resources.getDrawable(id, context.getTheme());
} else {
    return resources.getDrawable(id);
}

à partir de API 21, vous devez utiliser la méthode getDrawable(int, Theme) au lieu de getDrawable(int) , car elle vous permet de récupérer un objet dessinable. associé à un ID de ressource particulier pour la densité/thème d'écran donné. Appeler la méthode dépréciée getDrawable(int) équivaut à appeler getDrawable(int, null) .

718
répondu Alex Lockwood 2016-08-06 02:50:30

remplacer cette ligne : getResources().getDrawable(R.drawable.your_drawable)

avec ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)

EDIT

ResourcesCompat est également déprécié maintenant. Mais vous pouvez utiliser ceci:

ContextCompat.getDrawable(this, R.drawable.your_drawable) (ici this est le contexte)

pour plus de détails, suivez ce lien: ContextCompat

138
répondu vincent091 2016-08-29 20:00:40

getResources().getDrawable() a été déprécié au niveau 22 de L'API. Maintenant, nous devons ajouter le thème:

getDrawable (int id, Resources.Thème Thème) (ajouté dans le niveau API 21)

Ceci est un exemple:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));

Ceci est un exemple de validation pour les versions suivantes:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
   } else { 
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage));
}
25
répondu Jorgesys 2016-05-17 18:32:57

vous pouvez utiliser

ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);

c'est un travail pour moi

2
répondu Dasser Basyouni 2016-12-26 04:36:32

juste un exemple de la façon dont j'ai corrigé le problème dans un tableau pour charger une listView, j'espère que ça aidera.

 mItems = new ArrayList<ListViewItem>();
//    Resources resources = getResources();

//    mItems.add(new ListViewItem(resources.getDrawable(R.drawable.az_lgo), getString(R.string.st_az), getString(R.string.all_nums)));
//    mItems.add(new ListViewItem(resources.getDrawable(R.drawable.ca_lgo), getString(R.string.st_ca), getString(R.string.all_nums)));
//    mItems.add(new ListViewItem(resources.getDrawable(R.drawable.co_lgo), getString(R.string.st_co), getString(R.string.all_nums)));
    mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.az_lgo, null), getString(R.string.st_az), getString(R.string.all_nums)));
    mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.ca_lgo, null), getString(R.string.st_ca), getString(R.string.all_nums)));
    mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.co_lgo, null), getString(R.string.st_co), getString(R.string.all_nums)));
1
répondu Jay 2016-01-12 17:40:50

essayez ceci:

public static List<ProductActivity> getCatalog(Resources res){
    if(catalog == null) {
        catalog.add(new Product("Dead or Alive", res
                .getDrawable(R.drawable.product_salmon),
                "Dead or Alive by Tom Clancy with Grant Blackwood", 29.99));
        catalog.add(new Product("Switch", res
                .getDrawable(R.drawable.switchbook),
                "Switch by Chip Heath and Dan Heath", 24.99));
        catalog.add(new Product("Watchmen", res
                .getDrawable(R.drawable.watchmen),
                "Watchmen by Alan Moore and Dave Gibbons", 14.99));
    }
}
1
répondu syakirin mohd nor 2017-02-09 15:06:23

en api de niveau 14

marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
0
répondu Jaime López Romero 2018-05-03 13:42:06
"151910920 de Construire".VERSION_CODES.LOLLIPOP devrait maintenant être changé en BuildVersionCodes.Sucette j'.e:

if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) {
    this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder, Context.Theme);
} else {
    this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder);
}
0
répondu Ryan Herman 2018-05-03 13:42:48

si vous ciblez SDK > 21 (lollipop ou 5.0) utiliser

context.getDrawable(R.drawable.your_drawable_name)

voir docs

0
répondu Adeel Ahmad 2018-09-24 20:21:03