Android: cambia el color del botón cuando se hace clic

Básicamente, estoy tratando de crear un botón que al hacer clic (nota: NO presionado) cambiará el color de color1 a color2. Cuando se hace clic de nuevo, cambiará de color2 a color1.

He buscado como un loco y la única información que logré extraer fue cómo cambiar el color cuando se presiona el botón, es decir, cuando el usuario mantiene presionado el botón (este código se escribirá a continuación). Sin embargo, quiero que el color cambie cuando el usuario hace clic (presiona y libera) el botón y luego cambia de nuevo una vez que el usuario hace clic otra vez.

Este archivo está en res / drawable

<!-- Changes color when user hols down button --> <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape> <!-- change to color2 --> </shape> </item> <item> <shape> <!-- change to color1 --> </shape> </item> </selector> 

 boolean tmp = false; button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { tmp = !tmp; v.setBackgroundColor(tmp ? Color.RED : Color.BLUE); } }); 

EDIT: al parecer, desea tener un ejemplo más complejo

Primero cree un XML dibujable en el nombre pink_button.xml y coloque el siguiente código dentro

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#FF5EF1"/> <corners android:radius="15dp"/> <stroke android:width="1dp" android:color="#303030"/> </shape> 

Ahora haz un blue_button.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#008DFF"/> <corners android:radius="15dp"/> <stroke android:width="1dp" android:color="#303030"/> </shape> 

Ahora haga algún diseño de la actividad de demostración, utilicé button_demo_activity.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/btnDemo" android:layout_width="150dp" android:layout_height="30dp" android:layout_centerInParent="true" android:layout_marginTop="100dp" android:background="@drawable/pink_button" android:gravity="center" android:text="PINK" android:textColor="@android:color/white" android:textSize="15sp"/> </RelativeLayout> 

Y finalmente la actividad, el nombre lo que quieras usé ButtonDemoActivity

 public class ButtonDemoActivity extends Activity { private Button btnDemo; private boolean isPink = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.button_demo_activity); btnDemo = (Button) findViewById(R.id.btnDemo); btnDemo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { isPink = !isPink; int resId = isPink ? R.drawable.pink_button : R.drawable.blue_button; btnDemo.setBackgroundResource(resId); btnDemo.setText(isPink ? "PINK" : "BLUE"); } }); } } 

Y esto es lo que el aspecto final de los botones será en cada estado Introduzca aquí la descripción de la imagen

Estás en el camino correcto. Añadir otros estados como:

 <item android:state_selected="true"> <shape> <!-- change to color2 --> </shape> </item> 

A continuación, en su método onClick añadir algunos toggling:

 v.setSelected( !v.isSelected() ); 
  • Iniciar una nueva actividad en onCreate sólo funciona con demora
  • Error de actualización La cadena de consulta de URL no debe tener el bloque de reemplazo
  • Log4j2 en Android
  • Cómo obtener pruebas simples de JUnit para ejecutarse en Android Studio
  • Android: compás + distancia en una vista de lista
  • El evento LongClick también activa el evento Click
  • Varias llaves y valores de JSONObject no se guardarán en Parse
  • Vinculación de datos de Android mediante etiqueta de inclusión
  • Fuga de memoria MediaControllerCompat
  • Pushes no recibidos después de que la aplicación esté cerrada
  • Android, Volley Solicitud, la respuesta está bloqueando el hilo principal
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.