简洁优雅地实现夜间模式

前言

Android 6.0 Marshmallow 预览版中曾经短暂出现过相关的夜间模式的功能,只是在正式版中被移除了,在Android 7.0 Nougat上,用户们再次经历了「得而复失」的遗憾,在开发者预览版中,夜间模式和暗色模式先是开启,然后有再次被移除。而在正式版中,夜间模式也没有出现。但其实相关的代码一直存在于系统中,只是默认没有被开启。如何开启这项功能,可以参考少数派的这一篇文章,帮你找回 Android 7.0 夜间模式的 2 款应用。

不过,今天要介绍的主要内容并不是关于系统的夜间模式,而是如何给我们开发的APP添加夜间模式的功能。毫不夸张的说,夜间模式现在已经是阅读类App的标配了。事实上,日间模式与夜间模式就是给APP定义并应用两套不同颜色的主题。用户可以自动或者手动的开启。我们先看两个我认为实现地很优雅的例子:知乎和Twitter。

这两个APP在切换的工程中,并没有出现闪现黑屏的情况,切换也比较顺滑。我们的目标就是利用Support Library实现同样的效果。

实现

添加依赖

compile 'com.android.support:appcompat-v7:25.1.0'

由于Support Library在23.2.0的版本中才添加了Theme.AppCompat.DayNight主题,所以依赖的版本必须是高于23.2.0的,并且,这个特性支持的最低SDK版本为14,所以,需要兼容Android 4.0的设备,是不能使用这个特性的,在API Level 14以下的设备会默认使用亮色主题。不过现在4.0以下的设备应该比较少了吧,毕竟微信的minSdkVersion都设置为14了。

准备资源

  1. 让我们自己的主题继承并应用DayNight主题。

  2. 新建夜间模式资源文件夹:在res目录下新建values-night文件夹,然后在此目录下新建colors.xml文件在夜间模式下的应用的资源。当然也可以根据需要新建drawable-night,layout-night等后缀为-night的夜间资源文件夹。
    我的valuesvalues-night目录下的colors.xml的内容如下:




    #009688
    #00796B
    #009688
    #616161
    @android:color/white


                    

你可能感兴趣的:(简洁优雅地实现夜间模式)