Android: изменить цвет отключенного текста с помощью темы/стиля? - программирование

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>

но ничего не работает.

4b9b3361

Ответ 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);

        ...
    }
}

Таким образом, заголовок и сводка отображаются серым цветом, когда опция отключена.

Я просто использую это решение, так как у меня такая же проблема, и это может помочь кому-то