web-dev-qa-db-fra.com

Contraindre la hauteur de drawableLeft et drawableRight à la hauteur de TextView

J'ai le TextView suivant:

<TextView
    Android:drawableLeft="@drawable/loading"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="Updating Rates" />

Et le résultat est le suivant:

Comment puis-je rendre le cercle de chargement dessinable contraint proportionnellement pour que sa hauteur corresponde à la hauteur du texte?

Aussi, si possible, je voudrais ajouter un peu d'espacement entre le texte et l'image.

26
Dzhuneyt

Pour réduire la loading, il suffit de réduire la taille des images.

Ou utilisez RelativeLayout et placez le chargement dans un ImageView et mettez-le à l'échelle.

Ou vous pouvez ajouter un remplissage entre les tirables et le texte en utilisant Android:drawablePadding (ou setCompoundDrawablePadding() ):

Android:drawablePadding="3dp"
22
JafarKhQ

Je pense avoir trouvé la solution, mais un peu tard

Drawable drawable = getResources().getDrawable(R.drawable.s_vit);
drawable.setBounds(0, 0, (int)(drawable.getIntrinsicWidth()*0.5),(int)(drawable.getIntrinsicHeight()*0.5));
ScaleDrawable sd = new ScaleDrawable(drawable, 0, scaleWidth, scaleHeight);
Button btn = findViewbyId(R.id.yourbtnID);
btn.setCompoundDrawables(sd.getDrawable(), null, null, null); 
8
Ravi

La solution de Ravi a fonctionné pour moi, mais sur certains appareils, l'étirable disparaissait. Correction de cela en supprimant la mise à l'échelle.

    int bound = (int) (drawable.getIntrinsicWidth() * 0.5);
    drawable.setBounds(0, 0, bound, bound);
    b.setCompoundDrawables(drawable, null, null, null);
1
Dmide

Une meilleure solution consistera à créer un XML dans un dossier dessinable et à ajouter l'image à ce XML, et à maintenir scaleType comme "fitXY". Vous pouvez maintenant créer ce XML en tant que drawableLeft.

0
Abdul Vajid