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


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!