TL, DR;
ContextCompat.getColor()
не использует ночные цвета (values-night/colors.xml
), хотя должен, когда включен ночной режим.
Вот в чем проблема:
Привет всем,
Итак, я реализую темную тему для своего Android-приложения, я вызываю это, чтобы включить ее: AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
Я установил цвета в values/colors.xml
и темную версию в values-night/colors.xml
. Цвета хорошо меняются в зависимости от nightMode, НО:
Когда я использую ContextCompat.getColor(getApplicationContext(), R.id.myColor)
, используются обычные цвета (values/colors.xml
), а не ночные цвета (values-night/colors.xml
).
В моем build.gradle
я установил следующее:
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.2.0-beta01'
Может ли кто-нибудь сказать мне, что я делаю не так?
PS: я уже рассматривал следующий вопрос, и он не отвечает на эту проблему https : //stackoverflow.com/questions/57779661/contextcompat-getcolor-method-ignores-night-mode
1 ответ
Я столкнулся с аналогичными проблемами с ночным режимом. Некоторые экраны были в порядке, но другие сохранили обычную тему. В конце концов, я обнаружил, что создавал экземпляры некоторых представлений, используя контекст приложения вместо текущего контекста активности. По какой-то причине контекст приложения не отслеживает такую информацию.
Итак, обновите свой код, чтобы использовать контекст текущей активности вместо контекста приложения.
Для справки для других пользователей. Избегать:
ContextCompat.getColor(getApplicationContext(), R.id.myColor)
И используйте:
// In a Activity
ContextCompat.getColor(this, R.id.myColor)
// In a View
ContextCompat.getColor(getContext(), R.id.myColor)
// In a Fragment (check against null because getContext can trigger a NPE
Context context = getContext()
if (context != null) {
ContextCompat.getColor(context, R.id.myColor)
}
Похожие вопросы
Связанные вопросы
Новые вопросы
android
Android - это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфоны, планшеты, автомобили, телевизоры, одежда, стекло, IoT). Для тем, связанных с Android, используйте специальные теги Android, такие как android-intent, android-activity, android-адаптер и т. Д. Для вопросов, не связанных с разработкой или программированием, но связанных с платформой Android, используйте эту ссылку: https: // android.stackexchange.com .