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
?
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
?
Réponses:
Votre activité doit avoir la méthode getResources. Faire:
Drawable myIcon = getResources().getDrawable( R.drawable.icon );
Ce code est obsolète:
Drawable drawable = getResources().getDrawable( R.drawable.icon );
Utilisez-le à la place:
Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);
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.
Drawable myDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
myDrawable = context.getResources().getDrawable(id, context.getTheme());
} else {
myDrawable = context.getResources().getDrawable(id);
}
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.
ContextCompat.getDrawable(getContext(),R.drawable.[name])
Vous n'avez pas besoin d'utiliser getResources () lorsque vous utilisez cette méthode.
Cela équivaut à faire quelque chose comme
Drawable mDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
mDrawable = ContextCompat.getDrawable(getContext(),R.drawable.[name]);
} else {
mDrawable = getResources().getDrawable(R.id.[name]);
}
Cela fonctionne sur les versions pré et post Lollipop.
Obtenez Drawable à partir d'une ressource vectorielle indépendamment de, que ce soit son vecteur ou non:
AppCompatResources.getDrawable(context, R.drawable.icon);
Remarque:
ContextCompat.getDrawable(context, R.drawable.icon);
produira android.content.res.Resources$NotFoundException
pour la ressource vectorielle.
Si vous essayez d'obtenir le dessinable de la vue où l'image est définie comme,
ivshowing.setBackgroundResource(R.drawable.one);
alors le drawable ne retournera que la valeur null avec le code suivant ...
Drawable drawable = (Drawable) ivshowing.getDrawable();
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.
ivshowing.setImageResource(R.drawable.one);
ce n'est qu'alors que le dessinable sera converti exactement.
Si vous héritez d'un fragment, vous pouvez faire:
Drawable drawable = getActivity().getDrawable(R.drawable.icon)