373 votes

L'appel à setCompoundDrawables() n'affiche pas le Drawable composé.

Après avoir appelé le setCompoundDrawables méthode, le composé Drawable n'est pas montré

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn.setCompoundDrawables(myDrawable, null, null, null);

Des idées ?

12 votes

Comme indiqué dans les réponses ci-dessous, la variante de la méthode nommée (..)WithIntrinsicBounds doit être appelé. A propos, padding pour le Drawable composé doit être défini après cet appel pour provoquer un effet

8 votes

Le site documento dit : Les Drawables doivent déjà avoir setBounds(Rect) appelé.

0 votes

Bonjour Hunterp, je viens de vous rencontrer au café (Angel), maintenant que je sais que vous savez ce que sont les Drawables d'Android (et que vous avez peut-être rencontré des erreurs de mémoire en travaillant avec beaucoup d'entre eux), je peux vous parler de certains des projets auxquels j'ai collaboré pour traiter ce problème. github.com/JakeWharton/DiskLruCache (que j'ai collaboré à rendre plus convivial pour Android) qui est utilisé par Picasso ( github.com/square/picasso )

20voto

Asad Choudhary Points 113

L'image n'est pas affichée car vous n'avez pas spécifié les limites, vous avez donc 2 options ici.

1ère méthode

Utilisez setCompoundDrawablesWithIntrinsicBounds comme indiqué ci-dessous

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn. setCompoundDrawablesWithIntrinsicBounds(myDrawable, null, null, null);

2ème méthode

Vous pouvez appliquer des limites au drawable avant de les appliquer au TextView, comme indiqué ci-dessous

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
myDrawable.setBounds( 0, 0, myDrawable.getIntrinsicWidth(), myDrawable.getIntrinsicHeight());
btn.setCompoundDrawables(myDrawable, null, null, null);

C'est tout.

11voto

許維德 Points 109

Il est déprécié dans l'API 22.

Ce code est utile pour moi :

Drawable drawable = ResourcesCompat.getDrawable(getResources(),R.drawable.wen, null);
drawable.setBounds(0, 0, drawable.getMinimumWidth(),
drawable.getMinimumHeight());
tv.setCompoundDrawables(drawable, null, null, null);

4voto

CoolMind Points 11

En Kotlin :

1) Définir drawable :

val drawable = ContextCompat.getDrawable(context!!,R.drawable.ic_image)?.apply {
    setBounds(0, 0, intrinsicWidth, intrinsicHeight)
}

ou

val drawable = ResourcesCompat.getDrawable(resources, R.drawable.ic_image, null)?.apply {
    setBounds(0, 0, minimumWidth, minimumHeight)
}

2) Définir TextView :

textView.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null)

ou

button.setCompoundDrawables(null, drawable, null, null)

3voto

Bharat Dodeja Points 141

2voto

mike.tihonchik Points 1239

Exemple avec Kotlin :

    val myView = layoutInflater.inflate(R.layout.my_view, null) as TextView
    myView.setCompoundDrawablesWithIntrinsicBounds(0, myDrawable, 0, 0)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X