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)
}