Question Android getResources (). GetDrawable () API obsolète 22


Avec nouvelle API android 22 getResources().getDrawable() est maintenant obsolète. Maintenant, la meilleure approche est de n'utiliser que getDrawable().

Quel changement?


568
2018-03-13 20:05


origine


Réponses:


Vous avez quelques options pour gérer cette dépréciation le droit (et preuve du futur), selon le type de dessin que vous chargez:


UNE) drawables avec attributs de thème

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

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


B) drawables sans pour autant attributs de thème

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

Vous obtiendrez votre drawable sans style à l'ancienne. Notez s'il vous plaît: ResourcesCompat.getDrawable() est ne pas déconseillé!


SUPPLÉMENTAIRE) drawables avec attributs de thème de un autre thème

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

797
2018-03-19 14:13



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


Vous devriez utiliser le code suivant de la bibliothèque de support à 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 l'API 21, vous devez utiliser le getDrawable(int, Theme) méthode au lieu de getDrawable(int), car il vous permet de récupérer un objet pouvant être tracé associé à un ID de ressource particulier pour la densité / le thème d'écran donné. Appeler le désapprouvé getDrawable(int) méthode équivaut à appeler getDrawable(int, null).


711
2018-03-13 20:32



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

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

MODIFIER

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


136
2018-03-18 08:32



getResources().getDrawable() était obsolète au niveau API 22. Maintenant, nous devons ajouter le thème:

getDrawable (int id, thème Resources.Theme)  (Ajouté au niveau de l'API 21)

Ceci est un exemple:

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

Voici un exemple de validation pour les versions ultérieures:

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
2017-09-29 21:25



Vous pouvez utiliser

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

c'est du travail pour moi


2
2017-12-26 04:36



Juste un exemple de la façon dont j'ai résolu le problème dans un tableau pour charger un listView, j'espère que ça aide.

 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
2018-01-12 17:40



Essaye ça:

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
2018-02-09 14:47



en api niveau 14

marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));

0
2018-01-20 16:46



Build.VERSION_CODES.LOLLIPOP devrait maintenant être changé en BuildVersionCodes.Lollipop c'est à dire:

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
2017-12-02 01:06