2012-09-14 18 views
15

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.¿Cómo establecer el color de selección de botón junto con las esquinas redondeadas en Android?

estirable/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> 

estirable/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 el código, que estoy usando

android:background="@drawable/push_button" 

Aquí, el problema es, colores de los botones se configuran correctamente cuando se selecciona & deseleccionado. Pero las esquinas redondeadas no funcionan.

¿Cómo hacer eso? Si uso

android:background="@drawable/push_button_background" 

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

Cómo implementar esto?

Me he referido this enlace. ¡Incluso entonces no hay ayuda!

+0

puede que necesite definir unos pocos 'drawables' con los colores deseados y todo con radio, y cambie' @ color/color' por sus 'drawables' definidos. – Aprian

+0

@Aprian ... ¿pueden por favor elaborar un poco más? ¡Soy un novato en Android! puedes dar alguna muestra? – Bharath

Respuesta

51

He encontrado la respuesta a mi pregunta con unos pocos intentos de error de prueba &.

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> 
2

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.

+0

@zabawaba ... No ... ¡No funciona! ¡Hice esto también! – Bharath

+0

¿Has probado con un estilo?Es posible que desee crear uno para un botón y luego aplicarlo a los botones que alguna vez. No lo he probado antes para botones, pero sé que puede agregar selectores y modificar diferentes aspectos de una vista (altura, color, selector, imágenes, etc.) usando un estilo. – zabawaba99

0

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

Primero, creé una nueva clase que amplía el Botón. En esta clase, he creado 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 dibujables fondo que ves arriba son archivos XML que describen el aspecto botón. En su mayoría son iguales, pero varían en el conjunto de colores para cada uno. El botón gris por defecto se describe así:

<?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 yo sé, ese formato XML está a la espera de ser utilizado para configurar un degradado de color en la cara del botón. Como eso no era lo que quería, establecí los valores de color iguales y el color de fondo es constante. Es posible que necesite experimentar un poco con los valores de color, pero parece que ya tiene un control sobre eso.

Cuestiones relacionadas