¿Cómo progtwigr progtwigbleLeft en el botón de Android?

Estoy creando botones dinámicamente. Primero los diseñé usando XML, y estoy tratando de tomar el XML a continuación y hacerlo programático.

 

Esto es lo que tengo hasta ahora. Puedo hacer todo menos el dibujable.

 linear = (LinearLayout) findViewById(R.id.LinearView); Button button = new Button(this); button.setText("Button"); button.setOnClickListener(listener); button.setLayoutParams( new LayoutParams( android.view.ViewGroup.LayoutParams.FILL_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT ) ); linear.addView(button); 

Puede usar el método setCompoundDrawables para hacer esto. Vea el ejemplo aquí . Lo usé sin usar los setBounds y funcionó. Puedes probar de cualquier manera.

ACTUALIZACIÓN : Copiando el código aquí en caso de que el enlace se caiga

 Drawable img = getContext().getResources().getDrawable( R.drawable.smiley ); img.setBounds( 0, 0, 60, 60 ); txtVw.setCompoundDrawables( img, null, null, null ); 

o

 Drawable img = getContext().getResources().getDrawable( R.drawable.smiley ); txtVw.setCompoundDrawablesWithIntrinsicBounds( img, null, null, null); 

o

 txtVw.setCompoundDrawablesWithIntrinsicBounds( R.drawable.smiley, 0, 0, 0); 

Simplemente puedes probar esto también

 txtVw.setCompoundDrawablesWithIntrinsicBounds(R.drawable.smiley, 0, 0, 0); 

Para mí, funcionó:

 button.setCompoundDrawablesWithIntrinsicBounds(com.example.project1.R.drawable.ic_launcher, 0, 0, 0); 
 myEdtiText.setCompoundDrawablesWithIntrinsicBounds( R.drawable.smiley,0, 0, 0); 

Hice esto:

  // Left, top, right, bottom drawables. Drawable[] drawables = button.getCompoundDrawables(); // get left drawable. Drawable leftCompoundDrawable = drawables[0]; // get new drawable. Drawable img = getContext().getResources().getDrawable(R.drawable.ic_launcher); // set image size (don't change the size values) img.setBounds(leftCompoundDrawable.getBounds()); // set new drawable button.setCompoundDrawables(img, null, null, null); 

Podría ser útil:

 TextView location; location=(TextView)view.findViewById(R.id.complain_location); //in parameter (left,top,right,bottom) any where you wnat to put location.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.arrow,0); 

como señala @ Jérémy Reynaud, como se describe en esta respuesta , la forma más segura de establecer el dibujo izquierdo sin cambiar los valores de los otros dibujos (arriba, derecha e inferior) es usar los valores anteriores del botón con setCompoundDrawablesWithIntrinsicBounds :

 Drawable leftDrawable = getContext().getResources() .getDrawable(R.drawable.yourdrawable); // Or use ContextCompat // Drawable leftDrawable = ContextCompat.getDrawable(getContext(), // R.drawable.yourdrawable); Drawable[] drawables = button.getCompoundDrawables(); button.setCompoundDrawablesWithIntrinsicBounds(leftDrawable,drawables[1], drawables[2], drawables[3]); 

Entonces se conservará todo su dibujo previo.

Prueba esto:

 ((Button)btn).getCompoundDrawables()[0].setAlpha(btn.isEnabled() ? 255 : 100);