J'ai une image res/drawable/test.png
(R.drawable.test).
Je veux passer cette image à une fonction qui accepte Drawable
, par exemple mButton.setCompoundDrawables()
.
Alors, comment puis-je convertir une ressource d'image en un Drawable
?
Votre activité doit avoir la méthode getResources. Faire:
Drawable myIcon = getResources().getDrawable( R.drawable.icon );
Ce code est obsolète:
Utilisez-le à la place:
la source
ResourcesCompat.getDrawable(getResources(), R.drawable.icon, null);
(où le 3ème paramètre est une instance de thème facultative).La
getDrawable (int id)
méthode est dépréciée à partir de l'API 22.Au lieu de cela, vous devez utiliser le
getDrawable (int id, Resources.Theme theme)
pour API 21+Le code ressemblerait à quelque chose comme ça.
la source
getResources().getDrawable(R.drawable.ic_warning_80dp, context?.theme)
Je voudrais juste ajouter que si vous obtenez un message "obsolète" lors de l'utilisation de getDrawable (...), vous devez utiliser la méthode suivante à partir de la bibliothèque de support.
Vous n'avez pas besoin d'utiliser getResources () lorsque vous utilisez cette méthode.
Cela équivaut à faire quelque chose comme
Cela fonctionne sur les versions pré et post Lollipop.
la source
Obtenez Drawable à partir d'une ressource vectorielle indépendamment de, que ce soit son vecteur ou non:
Remarque:
ContextCompat.getDrawable(context, R.drawable.icon);
produiraandroid.content.res.Resources$NotFoundException
pour la ressource vectorielle.la source
Si vous essayez d'obtenir le dessinable de la vue où l'image est définie comme,
alors le drawable ne retournera que la valeur null avec le code suivant ...
Il est donc préférable de définir l'image avec le code suivant, si vous souhaitez récupérer le dessinable à partir d'une vue particulière.
ce n'est qu'alors que le dessinable sera converti exactement.
la source
Si vous héritez d'un fragment, vous pouvez faire:
Drawable drawable = getActivity().getDrawable(R.drawable.icon)
la source