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.
- Permitir sólo la entrada de datos únicos con Android SQLite?
- ¿Cómo usar una clase de contrato en android?
- Prueba de la clase de comunicación con DB a través de DAO de ORMLite
- Donde usar StringBuffer / StringBuilder que String
- Utilizando gps en un mapa estático en android?
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>
- Mostrar un RecyclerView en Fragmento
- Excepción fatal: org.apache.http.impl.conn.SingleClientConnManager.finalize () se ha agotado después de 10 segundos
- Imprima un archivo PDF en una impresora usando PrintWriter a través de una conexión de socket
- ¿Cómo obtener el ancho bruto de dispositivo y la altura o el ancho y la altura real de la pantalla?
- Persistencia de un objeto Parcelable en Android
- ¿Cómo repetir textview?
- ¿Es posible saltar la pista de una aplicación de Android?
- Widget no se actualiza después de cambios de configuración
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
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() );
- FloatingActionButton, layout_anchor y layout_gravity
- Cómo implementar la animación de texto de lista personalizada