Я использовал метод для получения цветовых атрибутов из текущего Context
:Получить Тему Attribute из приложений класса
public static int getColorAttribute(Context context, @AttrRes int attr) {
final TypedValue value = new TypedValue();
context.getTheme().resolveAttribute(attr, value, true);
return value.data;
}
Он отлично работает, но когда я попытался использовать его в своем классе, который расширяет Application
возвращает 0
, В большинстве случаев я бы назвал метод следующим образом:
int colorAccent = Util.getColorAttribute(this, R.attr.colorAccent);
Это вернет "colorAccent"
, что я поставил в themes.xml
как мой AppTheme
в моем манифесте. Но в классе Application
мне пришлось позвонить getApplicationContext()
вместо this
. Поэтому я переключил один из моих других экземпляров метода в Activity
на getApplicationContext()
, и он вернул 0
. Я также пробовал getApplication()
и getBaseContext()
с тем же результатом.
Мне было интересно, есть ли способ получить цвет от темы приложения в классе Application
. Или, если нет, почему getApplicationContext().getTheme()
, похоже, не возвращает тему приложения.
Это работает! Кроме того, технически я не использую его для задачи пользовательского интерфейса, я использую его для установки цвета значка уведомлений. Я мог бы использовать 'getColor()', но я хотел сохранить его относительно акцента цвета в случае его изменения. В любом случае, не следует ли делать это в классе 'Application'? Может быть, моя «MainActivity» или «PreferenceActivity» вместо этого? Я делаю это только в своем классе 'Application', потому что именно там я настраиваю остальные свойства уведомлений. – Bryan
Кроме того, я не думал об этом раньше, но я мог бы использовать «ContextThemeWrapper». Я думаю, может быть, это лучше использовать в классе 'Application'? Таким образом, я не использую контекст приложения напрямую. – Bryan
из моего понимания ContextthemeWrapper - это когда у вас уже есть контекст, но что добавить к нему несколько тем. Таким образом, вы можете использовать несколько элементов пользовательского интерфейса из разных тем. – j2emanue