2013-07-21 16 views
13

Mam następujące kolory zdefiniowane w moim color.xml:Android: zmienić kolor wyłączonego tekstu za pomocą motywu/stylu?

<color name="gold">#d49e43</color> 
<color name="gold_disabled">#80d49e43</color> 

i następujący motyw:

<style name="Theme.Example" parent="@style/Theme.Sherlock">  
    <item name="android:textColor">@color/gold</item> 
</style> 

W moim SettingsActivity mam CheckBoxPreference i preferencją, że zależy od niego. Kiedy opcja CheckBoxPreference nie jest zaznaczona, preferencja jest wyłączona, ponieważ ustawiony przeze mnie niestandardowy kolor złotego tekstu nie zostanie "wyszarzony", jak w przypadku domyślnego koloru. Jak to zmienić w XML? Próbowałem ustawić:

<item name="android:textColorPrimaryDisableOnly">@color/gold_disabled</item> 
    <item name="android:textColorPrimaryInverseDisableOnly">@color/gold_disabled</item> 
    <item name="android:textColorPrimaryNoDisable">@color/gold_disabled</item> 
    <item name="android:textColorSecondaryNoDisable">@color/gold_disabled</item> 
    <item name="android:textColorPrimaryInverseNoDisable">@color/gold_disabled</item> 
    <item name="android:textColorSecondaryInverseNoDisable">@color/gold_disabled</item> 

, ale nic nie działa.

Odpowiedz

3

I zdobione to mniej lub bardziej przez przypadek, ale jeśli podklasy preferencji i zastąpić onBindView(), można osiągnąć „wyszarzoną” efekt gdy preferencja jest wyłączone:

@Override 
protected void onBindView(View view) { 
    // TODO Auto-generated method stub 
    super.onBindView(view); 
    TextView title = (TextView)view.findViewById(android.R.id.title); 
    TextView summary = (TextView)view.findViewById(android.R.id.summary); 

    if (title.isEnabled()) { 
     title.setTextColor(getContext().getResources().getColor(R.color.gold)); 
    } 
    else { 
     title.setTextColor(getContext().getResources().getColor(R.color.gold_disabled)); 
    } 

    if (summary.isEnabled()) { 
     summary.setTextColor(getContext().getResources().getColor(R.color.orange)); 
    } 
    else { 
     summary.setTextColor(getContext().getResources().getColor(R.color.orange_disabled)); 
    } 
} 
24

wiem Jestem spóźniony. Jednak miałem dokładnie ten sam problem i naprawiłem go właśnie teraz.

Znalazłem sposób, aby to naprawić za pomocą tylko plików zasobów. Znalazłem odpowiedź tutaj: https://stackoverflow.com/a/17123161/4860513

Zasadniczo można utworzyć selektora kolorów under: RES/kolor/

Uwaga: Musisz utworzyć folderu kolor, jeśli nie istnieje.

Dla mnie, zrobiłem to:

res \ color \ primary_text_color_selector.xml (o tytuł)

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

res \ color \ secondary_text_color_selector.xml (na podsumowanie)

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

Następnie, w moim stylu preferencji, zrobiłem:

res \ Wartości \ styles.xml

<!-- Preference Screen Theme --> 
<style name="AppTheme_PreferenceScreenStyle"> 
    <item name="android:textColorPrimary">@color/primary_text_color_selector</item> 
    <item name="android:textColorSecondary">@color/secondary_text_color_selector</item> 
</style> 

w SettingsFragmentActivity.java

public class SettingsFragmentActivity extends PreferenceFragment { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     addPreferencesFromResource(R.xml.settings); 
     PreferenceScreen preferenceScreen = getPreferenceScreen(); 

     mContext = preferenceScreen.getContext(); 
     mContext.setTheme(R.style.AppTheme_PreferenceScreenStyle); 

     ... 
    } 
} 

ten sposób tytuł i streszczenie są nieaktywne, gdy opcja jest wyłączona.

Ja tylko udostępnienie tego rozwiązania, ponieważ mam ten sam problem i może pomóc ktoś

+1

Doskonałe rozwiązanie wszelkich potrzebnych etapie jego realizacji - bardzo mi pomogło –

+0

to będzie działać na zmianę koloru wyboru lub ikony przycisków radiowych? Jeśli tak, jakie byłyby nazwy elementów w pliku styles.xml? –

+0

Upewnij się, że "android: textColor" nie jest zdefiniowany, lub to nie działa. –

Powiązane problemy