J'ai une image res/drawable/test.png
(R.drawable.test).
Je souhaite transmettre cette image à une fonction qui accepte Drawable
.
(par exemple, mButton.setCompoundDrawables ())
Alors, comment convertir une ressource image en un fichier Drawable
?
Votre activité devrait 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 ceci à la place:
Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);
La méthode getDrawable (int id)
est amortie à partir de l'API 22.
À la place, vous devez utiliser la 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);
}
Je voudrais juste ajouter que si vous obtenez un message "obsolète" lorsque vous utilisez getDrawable (...), vous devez utiliser la méthode suivante à partir de la bibliothèque de support.
ContextCompat.getDrawable(getContext(),R.drawable.[name])
Vous n'êtes pas obligé 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.
Get Drawable à partir d'une ressource vectorielle, que ce soit son vecteur ou non:
AppCompatResources.getDrawable(context, R.drawable.icon);
Note:ContextCompat.getDrawable(context, R.drawable.icon);
produira Android.content.res.Resources$NotFoundException
pour la ressource vectorielle.
Si vous essayez d’obtenir le dessin de la vue où l’image est définie,
ivshowing.setBackgroundResource(R.drawable.one);
alors le drawable retournera seulement 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 dessin d'une vue particulière.
ivshowing.setImageResource(R.drawable.one);
alors seulement le dessinable sera converti exactement.
Si vous héritez d'un fragment, vous pouvez faire:
Drawable drawable = getActivity().getDrawable(R.drawable.icon)