2013-07-21 60 views
13

我在color.xml定義下列顏色:Android:使用主題/樣式更改禁用文本的顏色?

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

而以下主題:

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

在我SettingsActivity,我有一個CheckBoxPreference和依賴於它的偏好。當CheckBoxPreference被取消選中時,首選項被禁用,但是,由於我設置了自定義的金色文本顏色,它不會像使用默認顏色一樣「變灰」。我如何在XML中進行更改?我試過設置:

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

但似乎沒有任何工作。

回答

3

我想通了這一點或多或少的偶然,但如果你繼承偏好和覆蓋onBindView(),您可以在首選項被禁用實現「變灰」的效果:

@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

我知道我遲到了。但是,我有完全相同的問題,我剛剛修復。

我找到了一種方法來解決它只使用資源文件。我找到了答案在這裏:RES /彩色/

注:https://stackoverflow.com/a/17123161/4860513

基本上,你可以在創建一個顏色選擇您必須創建文件夾的顏色,如果它不存在。

對於我來說,我做到了:

資源\顏色\ primary_text_color_selector.xml(對於標題)

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

資源\顏色\ secondary_text_color_selector.xml(簡易)

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

然後,按照我的喜好風格,我做了:

資源\值\ 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> 

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

     ... 
    } 
} 

這樣,標題和摘要是灰色的,當選項被禁用。

我只是分享這一解決方案,因爲我有同樣的問題,它可以幫助別人

+1

與所有必要的步驟的最佳解決方案,以實現它 - 對我幫助很大 –

+0

將這工作改變複選框的顏色或單選按鈕圖標?如果是這樣,styles.xml文件中的項目名稱是什麼? –

+0

確保沒有定義「android:textColor」,否則這不起作用。 –

相關問題