2011-02-17 16 views
11

He creado ToggleButtons personalizados en Android y dado que todos los botones heredan del mismo xml Deseo cambiar la forma en que actúan en función del estado, por lo que cuando se marca el estado Quiero para cambiar el color de la sombra, pero esto no parece posible con el SDK actual.Color de sombra en los botones dependiendo del estado en XML - Android

He creado un archivo XML que contiene button_colors:

<?xml version="1.0" encoding="utf-8"?> 
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
<item 
    android:state_checked="true" 
    android:color="#FFFFFF" /> 

<item 
    android:color="#000000" /> 
</selector> 

Pero esto sólo parece funcionar con el texto-color y no color de la sombra en el texto. ¿Hay algo que me falta? Y más bien no hago esto para cada botón manualmente en el código, ya que quiero que esto se aplique a cada botón de la aplicación.

ACTUALIZACIÓN EDIT:

Mi selector Actualmente tiene este aspecto

<selector 
xmlns:android="http://schemas.android.com/apk/res/android"> 

<item 
    android:state_checked="true" 
    android:drawable="@drawable/button_gradient_selected" /> 

<item 
    android:drawable="@drawable/button_gradient" /> 

</selector> 

Pero como he mencionado a continuación el comentarista me parece que no puede cambiar el estilo/el texto-color sombra de aquí ya que solo puede tomarse en un dibujante, parece.

Cuando trato de poner un estilo diferente en el botón de aquí se cierra forzosamente o no cambia el estilo dependiendo del estado. Cuando solo trato de poner el estilo aquí y hacer que el dibujable se establezca en el estilo que se cierra. De cualquier manera, no funciona, parece.

+0

posible duplicado de [Cómo agregar sombra a TextView en la selección/enfoque] (http://stackoverflow.com/questions/4753158/how-to-add-shadow-to-textview-on -selection-focus) – Jeremy

Respuesta

3

Consulte mi solución en una pregunta diferente de StackOverFlow. Extendí TextView para dar una solución de trabajo here. (Reemplazar vista de texto con el botón)

+0

La mejor solución si es necesario. –

-1

Este es el archivo de selección tiene que aplicar:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="false" android:drawable="@drawable/btn_toggle_off" /> 
    <item android:state_checked="true" android:drawable="@drawable/btn_toggle_on" /> 
    </selector> 

Estos son los Tey imagen utilizada por el impago ToggleButton: btn_toggle_on y btn_toogle_off

+1

Gracias por su respuesta, pero esta no es la respuesta ya que un dibujable no puede cambiar el color de la sombra solo el fondo dibujable. Según http://developer.android.com/guide/topics/resources/color-list-resource.html, debe usar un selector separado para los colores, pero esto no parece aplicarse a la sombra. Ya tengo un XML que selecciona dibujable pero no puede encontrar la manera de cambiar el color de sombra o el estilo a partir de ahí. –

+0

@Joakim Engstrom: Creo que no te estoy recibiendo correctamente. ¿Puedes publicar la captura de pantalla de tu actividad? Entonces será indescifrable para mí. – Praveen

+0

He actualizado mi pregunta anterior. –

8

Parece que el marco Android no soporta esto.

De TextView.java:

 case com.android.internal.R.styleable.TextView_textColor: 
      textColor = a.getColorStateList(attr); 
      break; 

     case com.android.internal.R.styleable.TextView_shadowColor: 
      shadowcolor = a.getInt(attr, 0); 
      break; 

Tratan textColor y shadowColor diferente.

+0

@jukuTienes razón, esto no está implementado en Android Framework, ya que debería ser –

+0

Vamos a http://code.google.com/p/android/issues/detail?id=17689 y pulsamos para hacerlo. –

-2

Usted puede tener un selector para el color de la sombra de esta manera: color_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:dither="true"> 
    <item 
     android:state_pressed="true" 
     android:color="@color/btn_text_on" /> 
    <item 
     android:state_focused="true" 
     android:color="@color/btn_text_on" /> 
    <item 
     android:color="@color/btn_text_off" />   
</selector> 

y luego utilizar este selector, mientras que el estilo de su botón en styles.xml así:

<style name="ButtonStyle"> 
<item name="android:textColor">#FF383C48</item> 
    <item name="android:textSize">12sp</item> 
    <item name="android:shadowColor">@drawable/color_selector</item> 
    <item name="android:shadowDx">0</item> 
    <item name="android:shadowDy">1</item> 
    <item name="android:shadowRadius">1</item> 
    <item name="android:typeface">sans</item> 
    <item name="android:textStyle">bold</item> 
</style> 
Cuestiones relacionadas