web-dev-qa-db-fra.com

Défini par programme, dessiné à gauche dans un TextView

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?

253
coder_For_Life22

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

715
BrainCrash

De ici je vois la méthode setCompoundDrawablesWithIntrinsicBounds (int, int, int, int) peut être utilisée pour faire cela.

15
Jack

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);
5
Shajeel Afzal

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)
}
0
r3dm4n