J'ai un textView en XML ici.
<TextView
Android:id="@+id/bookTitle"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:drawableLeft="@drawable/checkmark"
Android:gravity="center_vertical"
Android:textStyle="bold"
Android:textSize="24dip"
Android:maxLines="1"
Android:ellipsize="end"/>
Comme vous pouvez le voir, j'ai défini DrawableLeft en xml.
Je voudrais changer le drawable dans le code.
Y a-t-il un moyen de s'y prendre? Ou définir le drawableLeft dans le code pour la vue de texte?
Vous pouvez utiliser setCompoundDrawablesWithIntrinsicBounds (int gauche, int haut, int droite, int bas)
définir 0 où vous ne voulez pas d'images
Exemple pour Drawable à gauche:
TextView textView = (TextView) findViewById(R.id.myTxtView);
textView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon, 0, 0, 0);
Conseil: Chaque fois que vous connaissez un attribut XML mais que vous ne savez pas comment l'utiliser au moment de l'exécution. Il suffit d'aller à la description de cette propriété dans la doc du développeur. Vous y trouverez les méthodes associées si elles sont prises en charge à l'exécution. c'est-à-dire pour DrawableLeft
De ici je vois la méthode setCompoundDrawablesWithIntrinsicBounds (int, int, int, int) peut être utilisée pour faire cela.
Vous pouvez utiliser l’une des méthodes suivantes pour définir le dessin sur DrawView:
1- setCompoundDrawablesWithIntrinsicBounds (int, int, int, int)
2- setCompoundDrawables (Left_Drawable, Top_Drawable, Right_Drawable, Bottom_Drawable)
Et pour tirer des ressources que vous pouvez utiliser:
getResources().getDrawable(R.drawable.your_drawable_id);
Une extension Kotlin + un peu de rembourrage autour du dessinable
fun TextView.addDrawable(drawable: Int) {
val imgDrawable = ContextCompat.getDrawable(context, drawable)
compoundDrawablePadding = 32
setCompoundDrawablesWithIntrinsicBounds(imgDrawable, null, null, null)
}