android - ContextCompat.getColor() 忽略 NightMode

标签 android android-appcompat android-dark-theme

TL,博士;
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

最佳答案

我在夜间模式遇到了类似的问题。有些屏幕很好,但其他屏幕保持常规主题。最后,我发现我正在使用应用程序的上下文而不是当前的 Activity 上下文来实例化一些 View 。出于某种原因,应用程序的上下文不会跟踪此类信息。
因此,更新您的代码以使用当前的 Activity 上下文而不是应用程序上下文。
供其他用户引用。避免:

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 - ContextCompat.getColor() 忽略 NightMode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58323212/

相关文章:

android - AppCompat DayNight 主题总是显示为 Light 主题?

android - android 9.0 中的 Dark Theme 使我的应用布局变丑了

java - Android 通过 USB 传输文件

android - 无法在 Android/data 中创建文件夹

android - 将 Eclipse 项目导入 Android Studio 时出错

java - FragmentTransaction 仅在纵向模式下工作

android - 如何根据android系统设置禁用日夜主题的自动更改?

java - 如何以编程方式将系统 UI 设置为深色模式(而非应用程序)?

android - Robolectric 与 AppCompat 库不兼容的 AlertDialog 问题

android - 在 android 中发送带有联系表的邮件?