为了更好的用户体验,如知乎、简书等阅读类的App都加入了切换夜间模式的功能。今天,就来学习下夜间模式的一种实现方式。
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.XXXX);这个方法有四个参数可以选择,如下:
MODE_NIGHT_NO 不使用夜间模式(亮色主题)MODE_NIGHT_YES 使用夜间模式(暗色主题)MODE_NIGHT_AUTO 自动切换日间和夜间模式MODE_NIGHT_FOLLOW_SYSTEM 跟随系统的模式其中自动模式是使用到定位API,以计算出准确的日出和日落的事件
3 切换日间和夜间模式(即主体的切换)(1)获取当前主题 int mode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; (2)根据当前主题决定切换日间或者夜间模式 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); }效果如下:
4 夜间模式下资源的适配 在上图中我们发现,切换主题后,textView字体颜色还是黑色,看不清。 其实不管颜色还是图片都可以跟随主题变化的,做法如下:这里以文字颜色为例,在res建立values-night的文件夹,将colors.xml文件考入,并且修改夜间模式下我们想要替换的颜色,效果如下:现在文字颜色也变化了,至于其他资源的替换做法也是类似的