2013-07-21 7 views
13

私はcolor.xmlで定義された次の色があります。Android:テーマ/スタイルを使用して無効なテキストの色を変更しますか?

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

そして、次のテーマ:私のSettingsActivityで

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

を、私は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

I)は、多かれ少なかれ事故によってこれを考え出したが、あなたサブクラス優先ifと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

私が知っています遅刻だ。しかし、私はまったく同じ問題を抱えていました。

リソースファイルのみを使用して修正する方法が見つかりました。私はここで答えを見つけました:https://stackoverflow.com/a/17123161/4860513

基本的に、あなたは下のカラーセレクタを作成することができます:RES /カラー/

注:が存在しない場合は、フォルダの色を作成する必要があります。

のres \(タイトルの)色の\ 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> 

のres \(概要については)色の\ 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> 

次に、私の好みのスタイルでは、私はやった:

0オプションが無効になっているとき

のres \値\ 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); 

     ... 
    } 
} 

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

この方法では、タイトルと概要はグレー表示されています。

私は同じ問題を抱えていると、それはそれを実装するために必要なすべてのステップを持つ人

+1

優れたソリューションを助けるかもしれないので、私はこの解決策を共有しています - チェックボックスの色を変えるために私にこの仕事をたくさん –

+0

う助けたりラジオボタンアイコン?もしそうなら、styles.xmlファイル内の項目名は何でしょうか? –

+0

"android:textColor"が定義されていないこと、またはこれが機能しないことを確認してください。 –