Color.xmlで次の色を定義しています。
<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とそれに依存するPreferenceがあります。 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>
しかし、何も機能していないようです。
私はこれを多かれ少なかれ偶然に理解しましたが、Preferenceをサブクラス化し、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));
}
}
私は遅れていることを知っています。しかし、まったく同じ問題が発生し、今すぐ修正しました。
リソースファイルのみを使用して修正する方法を見つけました。私はここで答えを見つけました: https://stackoverflow.com/a/17123161/486051
基本的に、res/color /の下にカラーセレクターを作成できます。
注:フォルダーの色が存在しない場合は、作成する必要があります。
私にとって、私はそれをしました:
res\color\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\color\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>
次に、私の好みのスタイルで、私はしました:
res\values\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);
...
}
}
このように、オプションが無効になっている場合、タイトルと概要はグレー表示されます。
私は同じ問題を抱えており、誰かを助けるかもしれないので、私はこの解決策を共有しています