Как изменить цвет текста заголовка CheckBoxPreference в Android?

Я хочу сделать это: когда флажок CheckBoxPreference снят, цвет текста заголовка CheckBoxPreference становится серым, а если флажок установлен, цвет текста заголовка возвращается к исходному цвету (зависит от темы).

Что я делал до сих пор: я создал новый класс, расширяющий CheckBoxPreference.

public class CustomCheckBoxPreference extends CheckBoxPreference{

    TextView txtTitle;
    int originalTextColor;

    public CustomCheckBoxPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onBindView(View view) {

        txtTitle = (TextView) view.findViewById(android.R.id.title);
        originalTextColor = txtTitle.getCurrentTextColor();

        setOnPreferenceClickListener(new OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference preference) {
                if (isChecked()) {
                    txtTitle.setTextColor(originalTextColor);  //it doesn't work
                }
                else {
                    txtTitle.setTextColor(Color.GRAY);  //it doesn't work
                }
                return true;
            }
        });

        super.onBindView(view);
    }
}

Когда я запускаю приложение, txtTitle.setTextColor(..) видимо не работает, цвет текста вообще не меняется. Я также подтвердил с помощью отладчика, что был вызван метод onPreferenceClick.


person null    schedule 02.09.2014    source источник
comment
вы используете проверку isChecked(), но где она определена? вместо использования только icChecked() вам нужно использовать ((CheckBoxPreference)preference).isChecked() для проверки   -  person Rajen Raiyarela    schedule 08.10.2014
comment
@RajenRaiyarela: я расширил класс CheckBoxPreference, вот откуда он взялся.   -  person null    schedule 15.10.2014


Ответы (1)


Даже я сделал то же самое и у меня не сработало, я тоже не знаю причины.

Но это сработает, если вы удалите onPreferenceClickListener() и будете использовать только if else.

protected void onBindView(View view) {

    txtTitle = (TextView) view.findViewById(android.R.id.title);
    originalTextColor = txtTitle.getCurrentTextColor();


            if (isChecked()) {
                txtTitle.setTextColor(originalTextColor); 
            }
            else {
                txtTitle.setTextColor(Color.GRAY); 
            }
            return true;

    super.onBindView(view);

}
person quest    schedule 08.10.2014