2013-07-21 25 views
13

Ho il seguente colori definiti nel mio color.xml:Android: cambia colore del testo disabilitato usando Tema/Stile?

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

e la seguente tema:

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

Nel mio SettingsActivity, ho un CheckBoxPreference e una preferenza che dipende da esso. Quando CheckBoxPreference è deselezionato, la preferenza è disabilitata, tuttavia, a causa del colore del testo personalizzato in oro che ho impostato, non diventa "grigio" come con il colore predefinito. Come posso cambiare questo in XML? Ho provato a impostare:

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

ma niente sembra funzionare.

risposta

3

ho capito questo, più o meno per caso, ma se si sottoclasse Preferenze e sovrascrivere l'onBindView(), si può ottenere l'effetto "grigio", quando una preferenza è disabilitata:

@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

lo so Sono in ritardo. Tuttavia, ho avuto esattamente lo stesso problema e ho risolto solo ora.

Ho trovato un modo per risolvere il problema utilizzando solo i file di risorse. Ho trovato la risposta qui: https://stackoverflow.com/a/17123161/4860513

In sostanza, è possibile creare un selettore colore sotto: res/colore/

Nota: È necessario creare colore cartella se non esiste.

Per me, l'ho fatto:

res \ color \ primary_text_color_selector.xml (Per il titolo)

<?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 (Sommario)

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

Quindi, nel mio stile di preferenza, ho fatto:

res \ valori \ 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> 

in 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); 

     ... 
    } 
} 

In questo modo, Titolo e sommario sono disattivati ​​quando l'opzione è disabilitata.

Sto solo condividendo questa soluzione dal momento che ho lo stesso problema e può aiutare qualcuno

+1

Ottima soluzione con tutte le passo necessario per la sua attuazione - mi ha aiutato molto –

+0

Sarebbe questo lavoro per cambiare il colore della casella di controllo o icone dei pulsanti radio? In tal caso, quali sarebbero i nomi degli articoli nel file styles.xml? –

+0

Assicurarsi che "android: textColor" non sia definito, o che questo non funzioni. –

Problemi correlati