我正在为我的Android应用开发夜间模式。
我使用ContextCompat.getColor动态获取一些UI元素的颜色,但是这种方法没有获取正确的颜色。
当应用处于夜间模式时,也就是按照夜间资源限定符,在ContextCompat中获取的颜色来自values/colors.xml而不是values-night/colors.xml。
奇怪的是,如果我在Activity中调用ContextCompat.getColor,则它会返回正确的颜色。
奇怪的是,如果我在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'库。
我不知道它是否与这个bug有关。
希望您能找到解决方案或至少提供一些解决方法,例如从资源中获取特定配置的颜色(如果可能)。
getContext
而不是getActivity
吗?这只是一个猜测,但也许涉及到一些上下文主题包装器,此时activity!= context。 - Pawelthis
和getActivity()
是完全相同的对象。由于ContextCompat
是一个静态方法,因此在给定相同的输入和相同的时间情况下,它们绝对会执行相同的操作。 - ianhanniballake