Après avoir appelé la méthode setCompoundDrawables
, le composé Drawable n'est pas affiché.
Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn.setCompoundDrawables(myDrawable, null, null, null);
Des pensées?
Je devais utiliser setCompoundDrawablesWithIntrinsicBounds
.
Utilisez ceci (j'ai testé). Ça marche bien
Drawable image = context.getResources().getDrawable( R.drawable.ic_action );
int h = image.getIntrinsicHeight();
int w = image.getIntrinsicWidth();
image.setBounds( 0, 0, w, h );
button.setCompoundDrawables( image, null, null, null );
L'image est vide car elle n'a pas de limites spécifiées. Vous pouvez utiliser setCompoundDrawables()
mais avant de spécifier les limites de l'image, utilisez la méthode Drawable.setBounds()
.
Exemple réglé au sommet:
view.setCompoundDrawablesWithIntrinsicBounds(
null,
getResources().getDrawable(R.drawable.some_img),
null,
null
);
ordre des arguments: (gauche, haut, droite, bas)
Un peu plus simple encore:
Drawable image = context.getResources().getDrawable(R.drawable.ic_action );
image.setBounds( 0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight() );
button.setCompoundDrawables( image, null, null, null );
Il est déconseillé 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);
À Kotlin:
1) Définissez 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éfinissez TextView
:
textView.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null)
ou
button.setCompoundDrawables(null, drawable, null, null)
Pour moi setCompoundDrawablesWithIntrinsicBounds (Drawable, Drawable, Drawable, Drawable)) n'a pas fonctionné.
Je devais utiliser setCompoundDrawablesWithIntrinsicBounds (0, 0, 0, 0) .
Exemple avec Kotlin:
val myView = layoutInflater.inflate(R.layout.my_view, null) as TextView
myView.setCompoundDrawablesWithIntrinsicBounds(0, myDrawable, 0, 0)