2012-09-19 19 views
9

Quiero agregar una imagen a Button (no imagebutton, ya que el botón en particular puede contener texto o una imagen; además, el botón image tiene el mismo problema), conservando el estilo android original botón. Así que agregar android:background en el XML no lo corta, ya que eso eliminará el botón predeterminado de Android con esquinas redondeadas, etc. (android.R.drawable.btn_default)Android, agregue la imagen al botón

¿Es esto de alguna manera posible?

Creo que una forma es hacer una imagen de 9patch para el botón pulsado (una por arriba y otra por abajo) y onTouch Action_DOWN hacer una dibujable capas de fondo y poner eso en el botón, y hacer lo mismo pero con otro 9patch para onTouch Action_UP, pero creo que disminuirá sustancialmente el rendimiento de la aplicación, ya que requerirá bastante lectura de recursos y fusión de capas para todos los clics de botón (y para mi aplicación, eso será bastante). Es lo que declaro arriba correcto?

EDITAR: No puedo declarar el origen de la imagen en el XML, porque obtengo las imágenes de un servicio web, de modo que cualquier cosa puede colocarse en los botones, pero tiene que realizarse mediante programación.

+0

se puede establecer en cualquier momento que desee con backgroundDrawable setBackgroundDrawable (R.drawable.my_selector) http://stackoverflow.com/questions/12492064/android-add-image-to-button/ 12492097 # 12492097 – weakwire

+0

Entonces, ¿qué ocurre con la imagen que obtengo a través del servicio web? – stealthjong

Respuesta

21

Esto se puede hacer usando los android:drawableTop, android:drawableBottom, android:drawableLeft, android:drawableRight atributos en su layout.xml.

+0

No se puede usar XML, ver edición. – stealthjong

+1

En el código, puede usar el método "estrangly named" 'setCompoundDrawablesWithIntrinsicBounds (int, int, int, int)' como se describe aquí: http://developer.android.com/reference/android/widget/TextView.html#setCompoundDrawablesWithIntrinsicBounds (int, int, int) <- el enlace no está vinculado correctamente por SO ... – Ridcully

+0

Acabo de leer que obtienes las imágenes de un servicio web, entonces es mejor que uses este método: 'setCompoundDrawablesWithIntrinsicBounds (Drawable left, Drawable top , Drawable right, Drawable bottom) '. Puede crear los Drawables usando 'Drawable.createFromStream (InputStream es) '. – Ridcully

0

Usted puede crear su propia estirable con múltiples estados y establecer que a fondo

esquinas
<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_enabled="false" 
     android:drawable="@drawable/selected" /> 
    <item android:drawable="@drawable/normal" /> 
</selector> 

dibujables se han redondeado como tal.

<corners android:topLeftRadius="5dp" android:topRightRadius="5dp" 
     android:bottomLeftRadius="0.2dp" android:bottomRightRadius="0.2dp"/> 
8

Establecer a continuación la propiedad del botón para mostrar la imagen con texto, usando esta propiedad la imagen se visualiza encima del texto.

<Button android:drawableTop="@drawable/ic_launcher"/> 
2

Para el ajuste de Image:

btn.setBackgroundResource(R.drawable.ic_launcher); 

Para establecer el texto:

btn.setText("My Button"); 

Código:

private Drawable buttonDrawable; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final Button btn=(Button) findViewById(R.id.button1); 
    buttonDrawable=btn.getBackground(); 
    //Setting the image. 
    btn.setBackgroundResource(R.drawable.ic_launcher); 
    btn.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      /*Removing image and setting text*/ 
      btn.setBackgroundDrawable(buttonDrawable); 
      btn.setText("My Button"); 
     } 
    }); 
} 
+1

no funcionará, porque quiero conservar los botones de estilo de Android. cuando establezco el fondo, el original de Android se ha ido y reemplazado por un botón potencialmente cuadrado. Quiero la imagen en/en el botón, no en lugar del diseño del botón original – stealthjong

8

enter image description here

 <Button 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:background="@drawable/home_button" 
      android:drawableLeft="@android:drawable/ic_menu_edit" 
      android:drawablePadding="6dp" 
      android:gravity="left|center" 
      android:height="60dp" 
      android:padding="6dp" 
      android:text="AndroidDhina" 
      android:textColor="#000" 
      android:textStyle="bold" /> 

para obtener más información http://androiddhina.blogspot.in/2015/09/how-to-add-image-inside-button.html

Cuestiones relacionadas