Android 夜间模式系列笔记(一)AppCompatDelegate

系列文章:

《Android 夜间模式系列笔记(二)通过更换主题实现夜间模式》

Support Library 23.2在AppCompat 加入了新的主题:Theme.AppCompat.DayNight,使应用可以很便捷的实现日夜模式。


            

使用方式:

1.引入support包(版本需要大于23.2

compile 'com.android.support:appcompat-v7:26.+'

2.主题继承Theme.AppCompat.DayNight      



    
    

3.资源文件加添加XXX-night的文件夹,并添加需要设置夜间模式的资源

     比如上面的颜色资源可以这样设置

      res/values/colors.xml(白天)



    #3F51B5
    #303F9F
    #FF4081
    #FFFFFF
    #000000

      res/values-night/colors.xml(夜间)      



    #3F51B5
    #303F9F
    #FF4081
    #000000
    #FFFFFF

4.设置日夜间模式

    通过调用AppCompatDelegate.setDefaultNightMode(mode),可以设置全局的夜间模式(进程)

    通过调用getDelegate().setLocalNightMode(mode),可以设置局部的夜间模式(当前组件)

    设置完后,需要调用recreate()重启activity

    mode的取值有四种:

       AppCompatDelegate.MODE_NIGHT_NO  :白天模式
       AppCompatDelegate.MODE_NIGHT_YES  :夜间模式
       AppCompatDelegate.MODE_NIGHT_AUTO  :根据当前时间自动切换日夜间模式(比如北京时间22:00会自动切换为夜间)
       AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM :跟随系统


5.初始化模式

  可以在application里面设置 

        

static {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_ NIGHT_YES);
}

    或者在oncreate里面恢复上一次保存的状态值

        

int nightMode = SharedPrefUtil.getInstance().getNightMode();
AppCompatDelegate.setDefaultNightMode(nightMode);

  6.需要注意的问题

      (1)如果启动时设置为夜间模式,可能会先闪过一个白色页面才进入夜间模式

              解决办法: 去掉默认的窗口背景色 

               

@null

      (2)调用recreate()重启activity,需要注意保存当前的数据,然后恢复

       (3)对于多个activity,如果是设置的全局的夜间模式,则所有的activity都需要调用一次recreate,否则没有调用的页面是不会生效的



demo链接:https://github.com/swustmuzi/PNightMode

       


你可能感兴趣的:(android)