2012-06-27 12 views
63

estoy tratando de hacer un botón con un selector de mi botón puede tener los siguientes estados:Android: textColor del botón desactivado en el selector no se muestra?

  • activado/desactivado
  • presionado/no pulsado

De acuerdo con los estados mencionados anteriormente. Necesito para manipular el botón de:

  • imagen de fondo
    • Color del texto El botón comienza mi ser desactivado por lo que debe tener el textColor discapacitados y personas con discapacidad el fondo del botón. ¡Pero puedo ver el textColor predeterminado (especificado en estilo) y NO la imagen de fondo!

      Aquí es mi selector de button_selector.xml

      <?xml version="1.0" encoding="utf-8"?> 
      
      <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
      
          <item android:state_pressed="false" 
           android:state_enabled="false" 
           android:textColor="#9D9FA2" 
           android:drawable="@drawable/button" />  
      
          <item android:state_pressed="true" 
           android:state_enabled="true" 
           android:drawable="@drawable/button_pressed"/> 
      
          <item android:state_pressed="true" 
           android:state_enabled="false" 
           android:textColor="#9D9FA2" 
           android:drawable="@drawable/button"/> 
      
          <item android:state_pressed="false" 
           android:state_enabled="true" 
           android:drawable="@drawable/button"/>  
      
      </selector> 
      

      Y aquí es mi declaración en el botón de mi layout.xml

      <Button android:id="@+id/reserve_button" 
           android:text="@string/reserve_button" 
           android:layout_width="120dp" 
           android:layout_height="40dp" 
           android:layout_marginTop="10dp" 
           android:layout_marginLeft="20dp" 
           android:paddingRight="15dp" 
           android:layout_gravity="left" 
           style="@style/buttonStyle" 
           android:background="@drawable/button_selector" /> 
      

      Y finalmente esto es mi estilo (en el que se establece por defecto mi textColor)

      <?xml version="1.0" encoding="utf-8"?> 
      
      <resources> 
      
          <style name="buttonStyle"> 
           <item name="android:textStyle">bold</item> 
           <item name="android:textColor">#282780</item> 
           <item name="android:textSize">18sp</item> 
          </style> 
      
      </resources> 
      

      ¡Por favor ayuda!

    Respuesta

    175

    Necesitas también crear un ColorStateList para los colores de texto que identifican los diferentes estados.

    Haz lo siguiente:

    1. crear otro archivo XML en res\color llamado algo así como text_color.xml.

      <?xml version="1.0" encoding="utf-8"?> 
      <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
          <!-- disabled state --> 
          <item android:state_enabled="false" android:color="#9D9FA2" /> 
          <item android:color="#000"/> 
      </selector> 
      
    2. En su style.xml, poner una referencia a ese archivo text_color.xml de la siguiente manera:

      <style name="buttonStyle"> 
          <item name="android:textStyle">bold</item> 
          <item name="android:textColor">@color/text_color</item> 
          <item name="android:textSize">18sp</item> 
      </style> 
      

    Esto debería resolver su problema.

    +1

    muchas gracias! ¡Exactamente lo que necesitaba! :) –

    +1

    selectores, yay! – speedynomads

    +1

    ¿no necesita guardar su archivo text_color.xml en/res/drawable (en lugar de/res/color) si se refiere a él mediante @ drawable/text_color? – Erwan

    0
    <Button android:id="@+id/reserve_button" 
         android:text="@string/reserve_button" 
         android:layout_width="120dp" 
         android:layout_height="40dp" 
         android:layout_marginTop="10dp" 
         android:layout_marginLeft="20dp" 
         android:paddingRight="15dp" 
         android:layout_gravity="left" 
         style="@style/buttonStyle" 
         android:background="@drawable/button_selector" /> 
    

    No puedo ver el doblaje de su botón en su diseño xml. agregar esto a su diseño de botón.

    android:enabled="false" 
    

    por lo que su diseño del botón será,

    <Button android:id="@+id/reserve_button" 
         android:text="@string/reserve_button" 
         android:layout_width="120dp" 
         android:layout_height="40dp" 
         android:layout_marginTop="10dp" 
         android:layout_marginLeft="20dp" 
         android:enabled="false" 
         android:paddingRight="15dp" 
         android:layout_gravity="left" 
         style="@style/buttonStyle" 
         android:background="@drawable/button_selector" /> 
    
    +0

    @ Aqif Hamid Hago eso programáticamente button.setEnabled (false) en mi método onCreat() –

    +0

    @NouranH Comparta su código por favor. –

    4

    La solución más fácil es configurar el filtro de color a la imagen de fondo de los botones y según vi here

    Se puede hacer de la siguiente manera:

    if ('need to set button disable') 
        button.getBackground().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY); 
    else 
        button.getBackground().setColorFilter(null); 
    

    Esperanza ayudé a alguien ...

    +0

    Esta es una buena forma de hacerlo de forma dinámica, cuando no tiene la imagen de fondo del botón por adelantado. Pero esto no se ocupa del color del texto. –

    3

    1.Create una carpeta de color en/res/carpeta y en la carpeta de color crear el xml:

    text_color_selector.xml

    <?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- disabled state --> 
    <item android:state_enabled="false" android:color="#776678" /> 
    <item android:color="#ffffff"/> 
    </selector> 
    

    2.Now Crear un diseño xml: -

    <Button 
    
         android:id="@+id/button_search" 
    
         android:layout_width="652dp" 
    
         android:layout_height="48dp" 
    
         android:layout_alignParentLeft="true" 
    
         android:layout_alignParentTop="true" 
    
         android:layout_marginTop="18dp" 
    
         android:background="@android:color/transparent" 
    
         android:text="Hello Bhaskar" 
    
         android:textColor="@color/text_color_selector"/> 
    
    0
    <item android:state_enabled="true"> </item> 
    
    <item android:state_enabled="false"> </item> 
    
    <item android:state_pressed="true" > </item> 
    

    Esperamos que le funciona!

    Cuestiones relacionadas