2011-08-03 11 views
205

Aquí tengo un textView en xml.Programmatically set drawable a la izquierda en un TextView

<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"/> 

Como puede ver, configuré el DrawableLeft en xml.

Me gustaría cambiar el dibujable en el código.

¿Hay alguna forma de hacerlo? ¿O configurar el drawableLeft en el código para la vista de texto?

Respuesta

584

Puede utilizar setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)

conjunto 0 en el que no desea que las imágenes

ejemplo para Disponibles a la izquierda:

TextView textView = (TextView) findViewById(R.id.myTxtView); 
textView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon, 0, 0, 0); 

Consejo: Cada vez que usted sabe cualquier atributo XML pero no tiene idea de cómo usarlo en tiempo de ejecución. solo vaya a la descripción de esa propiedad en el documento del desarrollador. Allí encontrará Métodos relacionados si es compatible en tiempo de ejecución. es decir For DrawableLeft

+0

Entonces, ¿dónde configuro el dibujable en este método? –

+1

+1 Está trabajando para configurar android: drawableLeft para TextView programáticamente. Gracias compañero –

+23

+1 para agregar la punta. eso debería ser lo primero que se les dice a los desarrolladores cuando usan los documentos – gmjordan

3

Puede utilizar cualquiera de los métodos siguientes para establecer el Disponibles en TextView:

1- setCompoundDrawablesWithIntrinsicBounds(int, int, int, int)

2- setCompoundDrawables(Left_Drawable, Top_Drawable, Right_Drawable, Bottom_Drawable)

Y para conseguir dibujable de recursos que puede utilizar:

getResources().getDrawable(R.drawable.your_drawable_id); 
+0

No, setCompoundDrawablesWithIntrinsicBounds (int, int, int, int) es API Levet 3 desde su propio enlace ... – BrainCrash

+0

¡Oh, perdón! He actualizado mi respuesta –

-7
static private Drawable **scaleDrawable**(Drawable drawable, int width, int height) { 

    int wi = drawable.getIntrinsicWidth(); 
    int hi = drawable.getIntrinsicHeight(); 
    int dimDiff = Math.abs(wi - width) - Math.abs(hi - height); 
    float scale = (dimDiff > 0) ? width/(float)wi : height/
      (float)hi; 
    Rect bounds = new Rect(0, 0, (int)(scale * wi), (int)(scale * hi)); 
    drawable.setBounds(bounds); 
    return drawable; 
} 
+0

Esto no responde la pregunta. Se espera una respuesta relacionada con TextView. – Rick

Cuestiones relacionadas