web-dev-qa-db-fra.com

Comment obtenir un objet Drawable à partir d'un identifiant de ressource dans le package Android?

Je dois obtenir un objet Drawable à afficher sur un bouton d'image. Existe-t-il un moyen d'utiliser le code ci-dessous (ou quelque chose du genre) pour obtenir un objet à partir du package Android.R.drawable. *?

par exemple, si drawableId était Android.R.drawable.ic_delete

mContext.getResources().getDrawable(drawableId)
142
Blaskovicz
Drawable d = getResources().getDrawable(Android.R.drawable.ic_dialog_email);
ImageView image = (ImageView)findViewById(R.id.image);
image.setImageDrawable(d);
204
Pete Houston

À compter 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 drawable associé à un resource ID particulier pour le étant donné screen density/theme. Appeler la méthode deprecatedgetDrawable(int) équivaut à appeler getDrawable(int, null).

Vous devriez plutôt utiliser le code suivant de la bibliothèque de support:

ContextCompat.getDrawable(context, Android.R.drawable.ic_dialog_email)

Utiliser cette méthode revient à appeler:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
    return resources.getDrawable(id, context.getTheme());
} else {
    return resources.getDrawable(id);
}
100
Muhammad Soliman

À partir de l'API 21, vous pouvez également utiliser:

   ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);

Au lieu de ContextCompat.getDrawable(context, Android.R.drawable.ic_dialog_email)

9
Zain

la meilleure façon est

 button.setBackgroundResource(Android.R.drawable.ic_delete);

OU this pour Drawable left et quelque chose comme ça pour right etc.

int imgResource = R.drawable.left_img;
button.setCompoundDrawablesWithIntrinsicBounds(imgResource, 0, 0, 0);

et

getResources().getDrawable() est maintenant obsolète

2
Inzimam Tariq IT