2012-06-27 11 views
63

Próbuję zrobić przycisk z selektorem mój przycisk może mieć następujące stany:Android: textColor wyłączonego przycisku w selektorze nie pokazuje?

  • włączony/wyłączony
  • wciśnięty/nie wciśnięty

Według stany wymienione powyżej. Muszę manipulować przycisk na:

  • kolor Tekst
  • tła

Przycisk zaczyna się mój jest wyłączony więc powinien mieć wyłączoną textColor i niepełnosprawnych przycisk tła. Ale widzę domyślny textColor (określony w stylu) i NIE ma obrazu tła!

Oto mój selektor 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> 

I tu jest moja deklaracja przycisk w moim 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" /> 

I w końcu to mój styl (gdzie moja domyślna textColor jest ustawiony)

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

Proszę pomóc!

Odpowiedz

175

Trzeba także stworzyć ColorStateList dla kolorów tekstowych identyfikujących poszczególne stany.

Wykonaj następujące czynności:

  1. Utwórz inny plik XML w res\color nazwie coś podobnego 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. w twojej style.xml umieścić odniesienie do tego pliku text_color.xml następująco:

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

To powinno rozwiązać problem.

+1

dziękuję bardzo! Dokładnie to, czego potrzebowałem! :) –

+1

selektory, yay! – speedynomads

+1

Nie musisz zapisywać pliku text_color.xml w/res/drawable (zamiast w/res/color), jeśli odwołujesz się do niego przez @ 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" /> 

Nie widzę dumplinga twojego przycisku w twoim układzie xml. dodaj to do układu przycisków.

android:enabled="false" 

więc układ przycisków będzie,

<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 Robię to programowo button.setEnabled (false) w mojej metodzie onCreat() –

+0

@NouranH Udostępnij swój kod, proszę. –

4

Najbardziej wygodnym rozwiązaniem jest ustawienie filtru kolorów do obrazu tła i przycisk jak widziałem here

Można to zrobić następująco:

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

nadzieję, że ktoś pomógł ...

+0

To jest dobry sposób, aby zrobić to dynamicznie, gdy nie masz wcześniej obrazu tła przycisku. Ale to nie zajmuje się kolorem tekstu. –

3

1.Create folder kolor w/rES/folderu w folderze kolorów i tworzyć na 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 utworzyć układ 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> 

Mam nadzieję, że będzie działa!

Powiązane problemy