¿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
- Error al agregar tema personalizado a la aplicación
- cambio gradual del color del botón en androide
- Problema con Android OptionsMenu, el fondo siempre es transparente
- Cómo establecer el color del texto en una vista de texto mediante programación
- Android: color de fondo cuando se pulsa el elemento de menú
<?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!
- Cómo recuperar BackgroundColorSpan para el texto seleccionado en android
- Cómo cambiar el color de los elementos de ListView en el enfoque y al hacer clic
- Android: cambia dinámicamente TextView Color de fondo
- Obtener el color de fondo de un botón en android
- Listview y CustomAdapter que amplían SimpleCursorAdapter
- Diseño de fondo de Android de color XML
- Cuál es el fondo de diseño predeterminado
- ¿Cómo cambiar el tema de color de la aplicación Android?
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.
- Cambiar fuente de la etiqueta flotante EditText y TextInputLayout
- Android ViewPager cambia automáticamente la página