values-night版本的colors.xml不在位图上使用

问题描述

主题更改为AppCompat.DayNight并启用夜间模式

我将应用程序主题Theme.AppCompat.Light更改为Theme.AppCompat.DayNight,并且在扩展ApplicationonCreate()方法的类中,我暂时进行了硬编码以打开夜晚模式:

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);

此外,在values-night添加main/res文件夹,并在其中创建了colors.xml,并为原始colors.xml中定义的颜色指定了替代值。现有的颜色名称集。

这一切都很好,除了位图。根据是否设置了夜间模式,文本和背景都会按预期更改。即使我根据应用程序的状态更改文本颜色的地方也反映了预期的夜间模式颜色。 但是位图似乎并没有注意我在colors.xml 添加values-night

可绘制对象

该应用程序具有所有分辨率(xhdpi,xxhdpi,xxxhdpi等)全黑的png文件,根据应用程序的状态,可以使用以下颜色以各种颜色显示它们:

ContextCompat.getDrawable(this,R.drawable.someimage).setColorFilter(ContextCompat.getColor(context,R.color.someColor),PorterDuff.Mode.SRC_ATOP);

values/colors.xml中,颜色指定如下:

<color name="someColor">#FF888888</color>

values-night/colors.xml中,颜色指定如下:

<color name="someColor">#FFCCCCCC</color>

问题在于,无论夜间模式是打开还是关闭,它始终显示#FF888888,而从不显示#FFCCCCCC。

是否需要做一些工作才能使它正常工作,还是应该向我的应用添加逻辑以检查夜间模式并强制使用我想要的颜色?

环境:Android Studio 3.4,已在装有Android 8.1.0的Moto G5 Plus上进行了测试。

添加了其他发现:应用程序进入后台,重置滤色器,翻转可见性

如果将应用程序长时间放置在后台,则下次运行该应用程序时,将适当的颜色用于位图。

我认为将开发人员选项更改为强制销毁活动会有所帮助,但似乎无济于事。 Settings > System > Developer Options > Apps: Don't keep activities

此外,我尝试在ContextCompat.getDrawable(,).setColorFilter()生命周期方法中运行onResume(),但未成功。

此外,我尝试了myView.invalidate()myView.invalidateDrawable(myDrawable),但都没有成功,并在onResume()中运行它们。

此外,我尝试打开和关闭Drawable可见性ContextCompat.getDrawable(,).setVisible(,)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)