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?
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);
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)
.
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
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));
}
vous pouvez utiliser
ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);
c'est un travail pour moi
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)));
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));
}
}
en api de niveau 14
marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
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);
}
si vous ciblez SDK > 21 (lollipop ou 5.0) utiliser
context.getDrawable(R.drawable.your_drawable_name)