Android: изменить цвет отключенного текста с помощью темы/стиля?
У меня есть следующие цвета, определенные в моем 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>
В моей настройке, у меня есть CheckBoxPreference и предпочтение, которое зависит от него. Если флажок CheckBoxPreference не установлен, предпочтение отключено, однако, из-за цвета настраиваемого золотого текста, который я установил, он не получает "greyed out", как при стандартном цвете. Как изменить это в 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>
но ничего не работает.
Ответы
Ответ 1
Я понял это более или менее случайно, но если вы подкласс 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));
}
}
Ответ 2
Я знаю, что опаздываю. Однако у меня была точно такая же проблема, и я исправил ее сейчас.
Я нашел способ исправить это, используя только файлы ресурсов. Я нашел ответ здесь: fooobar.com/info/409383/...
В принципе, вы можете создать селектор цвета под: 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>
Затем, в моем стиле предпочтений, я сделал:
Рез\значения\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);
...
}
}
Таким образом, заголовок и сводка отображаются серым цветом, когда опция отключена.
Я просто использую это решение, так как у меня такая же проблема, и это может помочь кому-то