【发布时间】:2019-09-03 23:09:55
【问题描述】:
我正在为我的 Android 应用开发夜间模式。 我正在使用 ContextCompat.getColor 以编程方式为某些 UI 元素获取颜色,但是这种方法没有获取正确的颜色。 当应用程序处于夜间模式时,根据夜间资源限定符,ContextCompat 从 values/colors.xml 中获取颜色,而不是从 values-night/colors.xml 中获取颜色。
奇怪的是,如果我从 Activity 调用 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)));
相反,如果我从 Activity 中的 Fragment 调用 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' 库
不知道是不是和this bug有关
我希望您能找到解决方案或至少一种变通方法,例如从特定配置的资源中获取颜色(如果可能的话)。
【问题讨论】:
-
你试过用
getContext代替getActivity吗?只是在黑暗中拍摄,但也许有一些上下文主题包装器参与其中的案例活动!=上下文。 -
已经试过了,还是不行:结果一样
-
this和getActivity(),假设 Fragment 在该活动中,实际上是完全相同的对象。由于ContextCompat是一个静态方法,因此在相同的输入和相同的时间点下,它们绝对会做同样的事情。
标签: java android xml android-night-mode