Использование цвета из темы не работает, как ожидалось - PullRequest
0 голосов
/ 28 марта 2019

Я хочу использовать цвет из атрибута темы для textView.setTextColor(). Я нашел метод:

public static int getColor(int attr, Resources.Theme theme) {
    TypedValue value = new TypedValue();
    theme.resolveAttribute(attr, value, true);
    return value.data;
}

и он не работает для некоторых TextView, как ожидалось. Например, он работает с R.attr.colorPrimary (текст становится красным ) и не работает с R.attr.colorPrimarySelector (мой пользовательский атрибут) (colorPrimarySelector синий, но текст становится прозрачным)

Но если я использую:

public static int getColor(int attr, Context context) {
    TypedValue value = new TypedValue();
    context.getTheme().resolveAttribute(attr, value, true);
    return ContextCompat.getColor(context, value.resourceId);
} 

и работает нормально. Я не понимаю, почему сначала работают для некоторого View или некоторого attr и не работают для другого, и в чем разница между возвращаемыми значениями. Контекст правильный.

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Найди решение! Если цвет установлен как colorStateList - первый метод всегда возвращает Color.TRANSPARENT. Итак, лучшее решение - второй метод

0 голосов
/ 28 марта 2019

Я думаю, что лучшим решением для изменения цвета текста является использование цвета из файла ресурсов.

, если вы занимаетесь:

textView.setTextColor(getResources().getColor(R.color.colorAccent));

, если вы находитесь во фрагменте:

textView.setTextColor(getContext().getResources().getColor(R.color.colorAccent));
...