67 votos

¿Cómo cambiar el color del botón en Android cuando se hace clic?

Estoy trabajando en una aplicación Android. Quiero tener 4 botones que se colocan horizontalmente en la parte inferior de la pantalla. En estos 4 botones 2 botones tienen imágenes en ellos. El borde de los botones debe ser de color negro y el borde debe ser lo más fino posible. Cuando hago clic en el botón, quiero que el fondo del botón cambie a color azul sin que cambie el color del borde y que permanezca en ese color durante algún tiempo. ¿Cómo puedo lograr este escenario en Android?

114voto

methode Puntos 1920

Un enfoque es crear un archivo XML como este en drawable llamado lo que sea.xml:

<?xml version="1.0" encoding="utf-8"?> 
  <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
      <item android:state_focused="true" android:state_pressed="true" 
            android:drawable="@drawable/bgalt" /> 
      <item android:state_focused="false" android:state_pressed="true" 
            android:drawable="@drawable/bgalt" /> 
      <item android:drawable="@drawable/bgnorm" /> 
  </selector>

bgalt y bgnorm son imágenes PNG en drawable.

Si crea los botones de forma programada en su actividad, puede establecer el fondo con:

final Button b = new Button (MyClass.this);
b.setBackgroundDrawable(getResources().getDrawable(R.drawable.whatever));

Si se establece el estilo de los botones con un XML, se haría algo así:

<Button
  android:id="@+id/mybutton"
  android:background="@drawable/watever" />

Intentaré buscar un enlace a un tutorial. Espero que esto ayude.

69voto

Faakhir Puntos 346

Guarde este código en la carpeta drawable con "bg_button.xml" y llame a "@drawable/bg_button" como fondo del botón en su xml:

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <solid
                android:color="#004F81" />
            <stroke
                android:width="1dp"
                android:color="#222222" />
            <corners
                android:radius="7dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:startColor="#89cbee"
                android:endColor="#004F81"
                android:angle="270" />
            <stroke
                android:width="1dp"
                android:color="#4aa5d4" />
            <corners
                android:radius="7dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>

8voto

Sankar Ganesh Puntos 6607

Hai referirse a esto,

boolean check=false;
Button backward_img;        Button backward_img1;
backward_img = (Button) findViewById(R.id.bars_footer_backward);
backward_img1 = (Button) findViewById(R.id.bars_footer_backward1);
backward_img.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
         check=true;
         backward_img.setBackgroundColor(Color.BLUE);
    }
});

if(check== true)
{
    backward_img1.setBackgroundColor(Color.RED);
    backward_img.setBackgroundColor(Color.BLUE);
}

5voto

Pir Fahim Shah Puntos 1786

Si quieres cambiar la imagen de fondo o el color del botón cuando se pulsa, entonces sólo tienes que copiar este código y pegarlo en tu proyecto en el lugar exacto descrito a continuación.

      <!-- Create new xml file like mybtn_layout.xml file in drawable -->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/pressed" /> <!--pressed --> 
<item android:drawable="@drawable/normal" /> <!-- Normal -->
</selector>
  <!-- Now this file should be in a drawable folder and use this 
  single line code in    button code to get all the properties of this xml file -->

    <Button
      android:id="@+id/street_btn"
      android:layout_width="wrap_content"
      android:background="@drawable/layout_a" > <!-- your required code -->
    </Button>

4voto

James Puntos 2722

Prueba esto......

Primero cree un archivo xml llamado button_pressed.xml Este es su contenido.

<?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" 
          android:state_pressed="false" 
          android:drawable="@drawable/icon_1" />
    <item android:state_focused="true" 
          android:state_pressed="true"
          android:drawable="@drawable/icon_1_press" />
    <item android:state_focused="false" 
          android:state_pressed="true"
            android:drawable="@drawable/icon_1_press" />
    <item android:drawable="@drawable/icon_1" />
</selector>

Noe prueba esto en su botón.

int imgID = getResources().getIdentifier("button_pressed", "drawable", getApplication().getPackageName());
button.setImageResource(imgID);

button_pressed.xml debe estar en la carpeta drawable. icon_1_press e icon_1 son dos imágenes para el botón pulsado y el enfoque normal.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X