¿Cómo configurar el color de selección del botón junto con las esquinas redondeadas en Android?

Quiero establecer una esquina redondeada para un botón en android junto con cambiar el color del botón cuando se selecciona. Estoy haciendo las siguientes cosas.

Drawable / push_button.xml

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

Drawable / push_button_background.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#3F4040"/> <corners android:radius="7dp" /> </shape> 

Y en código, estoy usando

 android:background="@drawable/push_button" 

Aquí, el problema es que los colores de los botones se establecen correctamente cuando se seleccionan y deseleccionan. Sin embargo, las esquinas redondeadas no funcionan.

¿Como hacer eso? Si yo uso

 android:background="@drawable/push_button_background" 

Entonces, las esquinas redondeadas están trabajando, pero el cambio de color del botón en la selección no está funcionando

¿Cómo implementar esto?

He referido este enlace. Incluso entonces no hay ayuda!

He encontrado respuesta para mi pregunta con pocos intentos de ensayo y error.

Aquí está la solución.

 <?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="@color/green"/> <corners android:radius="7dp"/> </shape> </item> <item android:state_focused="true" > <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="@color/green"/> <corners android:radius="7dp"/> </shape> </item> <item android:state_focused="false" > <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="@color/red"/> <corners android:radius="7dp"/> </shape> </item> <item android:state_pressed="false" > <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="@color/red"/> <corners android:radius="7dp" /> </shape> </item> </selector> 

Lo que hice fue definir la forma y especificar el dp de cada esquina.

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="90dp"> <solid android:color="#FFFFFF"/> <padding /> <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/> </shape> 

Si aumenta el dp en cada esquina hará que el botón sea más redondeado.

He tenido éxito en hacer exactamente lo que estás describiendo. Hice lo siguiente:

En primer lugar, he creado una nueva clase que extiende el botón. En esta clase, creé un método llamado setState ():

 public void setState (int s) { if (s > 0 && s < 4 &&) { this.state = s; switch (state) { case 1: setBackgroundDrawable (def_gray); break; case 2: setBackgroundDrawable (lt_gray); break; case 3: setBackgroundDrawable (black); } } } 

Los tres elementos de fondo que se ven arriba son archivos XML que describen el aspecto del botón. Son en su mayoría los mismos, pero varían en el conjunto de colores para cada uno. El botón gris predeterminado se describe de la siguiente manera:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <gradient android:startColor="#333333" android:endColor="#333333" /> <stroke android:width="2dp" android:color="@android:color/white" /> <corners android:radius="5dp" /> <padding android:left="2dp" android:top="2dp" android:right="2dp" android:bottom="2dp" /> </shape> </item> </selector> 

Por lo que sé, que el formato XML se espera que se utiliza para configurar un gradiente de color en la cara del botón. Puesto que no era lo que deseé, fijé ambos valores del color iguales y el color de fondo es constante. Puede que tenga que experimentar un poco con los valores de color, pero parece que ya tiene un identificador en eso.

  • ¿Cómo puedo obtener el color de fondo de la barra de acción del tema actual?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.