¿Cómo resaltar un botón cuando se presiona?

Estoy haciendo una prueba Andorid y quiero resaltar un botón cuando se hace clic, pero cuando el usuario deja ir el botón que se convierte en su color original. Usted ve que he fijado el fondo del botón así que los botones pueden ser redondeados. He puesto eso en dibujable.

<Button android:id="@+id/btn1" android:background="@drawable/roundedbutton" android:textColor="#ffffff" android:textStyle="italic" android:layout_width="225sp" android:layout_marginTop="23sp" android:layout_height="38sp" android:layout_alignLeft="@+id/btn2" android:layout_below="@+id/textView1" android:text="Button" /> 

Roundedbutton.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="10dp"> <solid android:color="#848482"/> <!-- this one is ths color of the Rounded Button --> <corners android:bottomRightRadius="6.5dp" android:bottomLeftRadius="6.5dp" android:topLeftRadius="6.5dp" android:topRightRadius="6.5dp"/> </shape> 

Puede utilizar OnTouchListener o puede utilizar un selector.

 button.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { // change color } else if (event.getAction() == MotionEvent.ACTION_UP) { // set to normal color } return true; } }); 

También puede utilizar un selector. Bordes y rectángulo redondeado. Personalizar el mismo.

Bkg.xml en carpeta dibujable

 <?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" /> <item android:state_focused="false" android:drawable="@drawable/normal" /> </selector> 

Normal.xml en carpeta dibujable

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#0AECBF"/> <stroke android:width="3dp" android:color="#0FECFF" /> <padding android:left="5dp" android:top="5dp" android:right="5dp" android:bottom="5dp"/> <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp" android:topLeftRadius="7dp" android:topRightRadius="7dp"/> </shape> 

Comprimido.xml en carpeta dibujable

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#ff33ffff" /> <padding android:left="5dp" android:top="5dp" android:right="5dp" android:bottom="5dp"/> <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp" android:topLeftRadius="7dp" android:topRightRadius="7dp"/> </shape> 

Ahora configure el fondo para su botón en xml

  android:background="@drawable/bkg" 

Utilice un selector como este y establecer los botones de fondo a la 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/blue" /> <!-- pressed --> <item android:state_focused="true" android:drawable="@drawable/blue" /> <!-- focused --> <item android:drawable="@drawable/red" /> <!-- default --> </selector> 

Modificar roundedbutton.xml

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"><shape android:padding="10dp" android:shape="rectangle"> <solid android:color="#ff0000" /> <!-- this one is ths color of the Rounded Button --> <corners android:bottomLeftRadius="6.5dp" android:bottomRightRadius="6.5dp" android:topLeftRadius="6.5dp" android:topRightRadius="6.5dp" /> </shape></item> <item><shape android:padding="10dp" android:shape="rectangle"> <solid android:color="#848482" /> <!-- this one is ths color of the Rounded Button --> <corners android:bottomLeftRadius="6.5dp" android:bottomRightRadius="6.5dp" android:topLeftRadius="6.5dp" android:topRightRadius="6.5dp" /> </shape></item> </selector> 

Si desea hacerlo programáticamente, también puede probar uno de los siguientes dos métodos: –

 btn1.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFFAA0000)); 

O de esta manera

 btn1.getBackground().setColorFilter(0xFFAA4400,PorterDuff.Mode.MULTIPLY); 

Acaba de poner este código en su método onCreate de la actividad y lo hará. Usted puede cambiar los códigos de color según su opción.

Espero que esto ayude.

Si no desea crear 2 dibujos con un selector xml o 2 formas o incluso no quiere molestarse en hacerlo mediante programación con un filtro de color, puede utilizar el destaque incorporado de Android utilizando el atributo selectableItemBackground:

 <!-- Background drawable for bordered standalone items that need focus/pressed states. --> <attr name="selectableItemBackground" format="reference" /> 

En su xml. Por ejemplo :

 <ImageButton android:id="@+id/btn_help" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_help" android:background="?android:selectableItemBackground"/> 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.