Avec la nouvelle API Android 22 getResources().getDrawable()
est désormais obsolète. Maintenant, la meilleure approche consiste à utiliser uniquement getDrawable()
.
Qu'est ce qui a changé?
Avec la nouvelle API Android 22 getResources().getDrawable()
est désormais obsolète. Maintenant, la meilleure approche consiste à utiliser uniquement getDrawable()
.
Qu'est ce qui a changé?
getDrawable (int id)
de la classeResources
soit déconseillée. Vous devez maintenant utiliser la méthodegetDrawable (int id, Resources.Theme theme)
avec le nouveau paramètre de thème.Resources#getDrawable(int)
etResources#getColor(int)
ont été dépréciés.Réponses:
Vous avez quelques options pour gérer cette dépréciation de la bonne manière (et à l' épreuve du temps ), selon le type de dessin que vous chargez:
A) Drawables avec des attributs de thème
Vous obtiendrez un dessinable de style selon les instructions de votre thème d'activité. C'est probablement ce dont vous avez besoin.
B) Drawables sans attributs de thème
Vous obtiendrez votre dessinable sans style à l'ancienne. Attention:
ResourcesCompat.getDrawable()
n'est pas déprécié!EXTRA) drawables avec des attributs de thème d' un autre thème
la source
Edit: voir mon blog sur le sujet pour une explication plus complète
Vous devez plutôt utiliser le code suivant de la bibliothèque de support:
L'utilisation de cette méthode équivaut à appeler:
À partir de l'API 21, vous devez utiliser la
getDrawable(int, Theme)
méthode au lieu degetDrawable(int)
, car elle vous permet de récupérer un objet dessinable associé à un ID de ressource particulier pour la densité / le thème d'écran donné. Appeler lagetDrawable(int)
méthode obsolète équivaut à appelergetDrawable(int, null)
.la source
getDrawable (int id)
méthode de laContext
classe. C'est la même chosegetResources().getDrawable(id, getTheme());
et utilise également la nouvelle API.getDrawable(int, Resources.Theme)
.Remplacez cette ligne:
getResources().getDrawable(R.drawable.your_drawable)
avec
ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)
ÉDITER
ResourcesCompat
est également obsolète maintenant. Mais vous pouvez utiliser ceci:ContextCompat.getDrawable(this, R.drawable.your_drawable)
(Voicithis
le contexte)pour plus de détails suivez ce lien: ContextCompat
la source
ResourcesCompat
est obsolète. Cela devrait bien fonctionner.getResources().getDrawable()
était obsolète dans l'API niveau 22. Maintenant, nous devons ajouter le thème:getDrawable (int id, Resources.Theme theme) (Ajouté dans l'API niveau 21)
Ceci est un exemple:
Voici un exemple de validation pour les versions ultérieures:
la source
Build.VERSION_CODES.LOLLIPOP is API 21
, Ne devrait donc pas êtreif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
ouif (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
? Ça ne fait rien. Par le bas "La méthode a été ajoutée dans l'API 21 mais elle n'a été déconseillée qu'à partir de l'API 22. :)"Vous pouvez utiliser
c'est du travail pour moi
la source
Juste un exemple de la façon dont j'ai résolu le problème dans un tableau pour charger une listView, j'espère que cela aide.
la source
Essaye ça:
la source
Si vous ciblez SDK> 21 (lollipop ou 5.0), utilisez
Voir les documents
la source
getDrawable (int drawable) est obsolète dans l'API niveau 22. Pour référence, voir ce lien .
Maintenant, pour résoudre ce problème, nous devons passer un nouveau constructeur avec id comme: -
Pour les solutions Faites comme ceci: -
En Java: -
ou
À Kotlin: -
ou
J'espère que cela vous aidera. Merci.
la source
en api niveau 14
la source
Maintenant, vous devez implémenter comme ça
Suivre une seule ligne de code suffit, tout sera pris en charge par ContextCompat.getDrawable
la source
Pour certains qui ont encore ce problème à résoudre même après avoir appliqué la suggestion de ce fil (j'en étais un comme ça), ajoutez cette ligne à votre classe Application, méthode onCreate ()
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
Comme suggéré ici et ici, cela est parfois nécessaire pour accéder aux vecteurs à partir des ressources, en particulier lorsque vous avez affaire à des éléments de menu, etc.
la source
Dans Kotlin, vous pouvez utiliser l'extension
puis utilisez comme
la source
Build.VERSION_CODES.LOLLIPOP devrait maintenant être remplacé par BuildVersionCodes.Lollipop, c'est-à-dire:
la source
BuildVersionCodes
une classe spécifique à Xamarin?