问题描述
将主题更改为AppCompat.DayNight并启用夜间模式
我将应用程序主题从Theme.AppCompat.Light
更改为Theme.AppCompat.DayNight
,并且在扩展Application
,onCreate()
方法的类中,我暂时进行了硬编码以打开夜晚模式:
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 (将#修改为@)