android 夜间模式源码,Android Support Library 之 夜间模式

前言

夜间模式实现方式:1、通过切换theme来实现夜间模式。优点:可以匹配多套主题,并不局限于黑白模式缺点:需要大量定义主题详见博客:http://wuxiaolong.me/2015/08/19/ChangeTheme/

2、通过修改uiMode来切换夜间模式。修改uimode是修改Configuration,这种主题切换只限于黑白模式,没有其他模式,不需要大量定义主题,即本文介绍的内容。

效果预览

如何使用

第一步

(1)app/build.gradle

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

(2)Activity须继承AppCompatActivity

(3)Theme.AppCompat.DayNight

@color/colorPrimary

@color/colorPrimaryDark

@color/colorAccent

false

true

第二步

应用全局主题推荐在 Application 的onCreate()中进行设置AppCompatDelegate.setDefaultNightMode(int mode);

它有四个可选值,分别是:MODE_NIGHT_NO: 使用亮色(light)主题,不使用夜间模式MODE_NIGHT_YES:使用暗色(dark)主题,使用夜间模式MODE_NIGHT_AUTO:根据当前时间自动切换 亮色(light)/暗色(dark)主题MODE_NIGHT_FOLLOW_SYSTEM(默认选项):设置为跟随系统,通常为 MODE_NIGHT_NO

第三步

动态的设定主题,需要切换主题调用:

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);

//调用recreate()使设置生效

recreate();注意事项

setDefaultNightMode()与setLocalNightMode()区别

AppCompatDelegate.setDefaultNightMode()是对整个App中theme为DayNight主题生效getDelegate().setLocalNightMode()只对特定的组件生效

夜间资源

把夜晚主题的color等资源放在values-night中,程序在运行时就会自动调用

获取应用当前的主题int currentNightMode = getResources().getConfiguration().uiMode

& Configuration.UI_MODE_NIGHT_MASK;

switch (currentNightMode) {

case Configuration.UI_MODE_NIGHT_NO:

// Night mode is not active, we're in day time

case Configuration.UI_MODE_NIGHT_YES:

// Night mode is active, we're at night!

case Configuration.UI_MODE_NIGHT_UNDEFINED:

// We don't know what mode we're in, assume notnight

}

如果切换了主题,本想通过这个方法,下次启动程序的时候,来设置。发现并没有记住这个值,还是只能SharedPreference读取,然后根据用户设置,调用 setDefaultNightMode() 方法。

适配文字图片

尽可能的使用主题属性(theme attributes)

文字颜色

android:textColor="?android:attr/textColorPrimary"

android:textColor="?android:textColorPrimary"

系统默认的文字颜色。在亮色(light)主题下,颜色接近黑色,在暗色(dark)主题下,颜色接近白色。有两种写法,次标题和三标题同样。

次标题

android:textColor="?android:attr/textColorSecondary"

三标题

android:textColor="?android:attr/textColorTertiary"

系统默认的背景颜色

android:background="?android:attr/colorBackground"

android:background="?android:colorBackground"

点击效果

android:background="?android:attr/selectableItemBackground"

android:background="?android:selectableItemBackground"

android:background="?attr/selectableItemBackground"

系统默认的图标颜色

如vector里颜色:

android:fillColor="?attr/colorControlNormal"源码地址

https://github.com/WuXiaolong/DesignSupportLibrarySample

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值