2012-10-07 5 views
25

Ho il seguente TextView:Vincola drawableLeft e l'altezza di drawableRight all'altezza di TextView

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

E il risultato è questo:

Come faccio a fare il carico cerchio vincolo drawable proporzionalmente in modo la sua altezza corrisponde all'altezza del testo?

Inoltre, se possibile, vorrei aggiungere una spaziatura tra il testo e l'immagine.

risposta

22

Per rendere il più piccolo loading solo rendere le immagini più piccoli.

Oppure utilizzare RelativeLayout e inserire il caricamento in un ImageView e ridimensionarlo.

Oppure è possibile aggiungere imbottiture tra le drawable e il testo utilizzando android:drawablePadding (o setCompoundDrawablePadding()):

android:drawablePadding="3dp" 
+0

"Per rendere le immagini più piccole" - Aiutami. Grazie. – offset

+0

@offset ridimensiona le immagini (Photoshop, GIMP, strumenti online, ... ecc.) – JafarKhQ

+1

Questo è quello che ho detto, ho ridotto l'immagine e ha risolto il mio problema. – offset

0

Hai solo bisogno di dichiarare due viste separate ImageView e TextView, e impostarle di conseguenza

+1

Sì, ma a volte drawableRight è necessario all'interno di TextView per gli ascoltatori di clic (come un'icona di selezione calendario). Quindi impostarli separatamente sarà un problema. –

+0

Inserirli in un LinearLayout e impostare il clic sul layout. Problema risolto! – noob

0

Better soluzione per creare un XML nella cartella drawable e aggiungere l'immagine a questo XML, e mantenere scaleType come "fitXY". Ora puoi rendere questo XML come DrawableLeft.

+1

Puoi aggiungere ulteriori dettagli? Forse un file XML di esempio? –

+1

Ho provato questo e non funziona. Non è possibile impostare la dimensione di un tramite XML nella cartella drawable. ScaleType = "fitXY" si applica a ImageViews non disegnabili. Sono andato con il ridimensionamento delle immagini e il loro inserimento nelle varie cartelle drawable-mdpi, drawable-xhdpi. – Deemoe

7

Credo di avere trovato la soluzione, ma un po 'tardi

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); 
+0

cos'è scalaWidth e scalaHeight in quel codice? – Sly

1

soluzione di Ravi ha lavorato per me, ma su alcuni dispositivi drawable scomparendo. Risolto questo problema rimuovendo il ridimensionamento.

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