如果你用的是Android studio开发,则先把Android工程切换为Project,在你的项目下的res目录下创建一个values-night文件夹,并在这个文件夹下创建colors.xml文件,代码如下
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="textColorPrimary">#616161</color>
<color name="viewBackground">#212a2f</color>
再看你的values文件夹下的colors.xml的代码
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="textColorPrimary">#616161</color>
<color name="viewBackground">@android:color/white</color>
这两个文件的不同就是其背景和文字的颜色不同,如果你布局里已经给你的文字和背景设置过颜色,则这两行颜色改变不起作用,你需要自己在colors.xml中定义两套主题颜色。接下来再来看看style.xml文件中的改变:
<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
其实就是把你主题中的Night改成了DayNight,就这么简单,接着看代码怎么实现切换
int mode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
if(mode == Configuration.UI_MODE_NIGHT_YES) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
} else if(mode == Configuration.UI_MODE_NIGHT_NO) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}
recreate();
可以将上面的代码放到你的监听事件里,这样就可以最简单的实现日夜间模式的切换了