Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ContextCompat.getColor方法忽略夜间模式_Java_Android_Xml_Android Night Mode - Fatal编程技术网

Java ContextCompat.getColor方法忽略夜间模式

Java ContextCompat.getColor方法忽略夜间模式,java,android,xml,android-night-mode,Java,Android,Xml,Android Night Mode,我正在为我的Android应用程序使用夜间模式。 我正在使用ContextCompat.getColor以编程方式获取某些UI元素的颜色,但是这种方法无法获取正确的颜色。 当应用程序处于夜间模式时,因此遵循夜间资源限定符,ContextCompat从values/colors.xml而不是values Night/colors.xml获取颜色 奇怪的是,如果我从活动调用ContextCompat.getColor,它会返回正确的颜色 //get Actual Theme Colors Strin

我正在为我的Android应用程序使用夜间模式。 我正在使用ContextCompat.getColor以编程方式获取某些UI元素的颜色,但是这种方法无法获取正确的颜色。 当应用程序处于夜间模式时,因此遵循夜间资源限定符,ContextCompat从values/colors.xml而不是values Night/colors.xml获取颜色

奇怪的是,如果我从活动调用ContextCompat.getColor,它会返回正确的颜色

//get Actual Theme Colors
String bgColor = String.format("#%06X", (0xFFFFFF & ContextCompat.getColor(this, R.color.dialogBackground)));
String txtColor = String.format("#%06X", (0xFFFFFF & ContextCompat.getColor(this, R.color.dialogText)));

相反,如果我从活动内的片段调用ContextCompat.getColor,它将返回错误的颜色

//get Actual Theme Colors
bgColor = String.format("#%06X", (0xFFFFFF & ContextCompat.getColor(getActivity(),R.color.dialogBackground)));
txtColor = String.format("#%06X", (0xFFFFFF & ContextCompat.getColor(getActivity(),R.color.dialogText)));
我使用的是'androidx.appcompat:appcompat:1.0.2'库

我不知道这是否与


我希望您能找到一个解决方案或至少是一个解决方法,例如从特定配置的资源获取颜色(如果可能)。

解决了这个问题,但我在这里帮助其他人解决同样的问题

这种奇怪的行为是由网络视图引起的。如上所述,当您首次打开Web视图,然后交换片段或向UI添加新视图时,它们将使用错误的颜色,而不考虑夜间主题。 如果以编程方式获得颜色,则会出现同样的问题。 我尝试了一些变通方法,如重新创建活动或使资源缓存无效,它们实际上解决了问题,但在性能方面确实很差

升级到androidx.appcompat:appcompat:1.1.0-rc01至少部分修复了该问题。 如果在应用程序的主题或布局xml中有一些未定义颜色的视图,则它们在首次启动webview时仍会出现故障并使用错误的颜色,然后更改片段。 因此,您应该使用资源变量(-night)为夜间颜色定义应用程序主题中视图的每种颜色。 如果这样做,视图将遵循主题并使用正确的颜色

TL;DR

  • 升级至androidx.appcompat:appcompat 1.1.0-rc01或最新版本

  • 检查您是否仍然有问题

  • 如果是,则为主题或xml中未定义颜色的每个视图设置颜色,对深色主题使用-night变量


您是否尝试过使用
getContext
而不是
getActivity
?只是在黑暗中拍摄,但可能有一些上下文主题包装涉及到哪种情况下的活动!=context。已经尝试过了,但不起作用:相同的结果
this
getActivity()
,假设该活动中的片段是完全相同的对象。由于
ContextCompat
是一种静态方法,它们在相同的输入和相同的时间下绝对会做相同的事情。