前言

夜间模式实现方式: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

android 夜间模式源码,Android Support Library 之 夜间模式相关推荐

  1. android studio im源码,Android Studio 导入 AOSP 源码

    有了 AOSP 源码,接下来就是如何看了,可以直接文本看,可以用 Source Insight,我当然选择 Android Studio,Android Studio 是我熟悉且十分强大的工具.问题来 ...

  2. android 滑动接听源码,android仿摩拜单车APP、炫酷RecyclerView、卡片滑动、仿饿了么点餐、自定义索引等源码...

    Android精选源码 Android优质博客 前言permissions4m 最初的设计是仅仅做成一个编译器注解框架,在1.0.0版本时,它纯粹地实现了原生 Android 请求流程,关于它的设计思 ...

  3. android工厂模式源码,Android源码设计模式——工厂模式

    工厂模式也是为了构建一个新的对象,它是创建型模式的一种. Android源码设计模式--Build模式(应用:AlertDialog源码分析) 上述是之前的Build模式,也是创建型模式一种,不懂的小 ...

  4. android工厂模式源码,android 设计模式:工厂模式

    放在开头:了解一个设计模式,首先也是最重要的就是了解它的设计依据 工厂模式按抽象的角度,层次不同分为: 抽象工厂方法   抽象工厂 先声明一点:下面提到的抽象类包括   接口,抽象类 抽象工厂方法设计 ...

  5. android仿疯狂猜图源码,Android开发实现高仿优酷的客户端图片左右滑动切换功能实例【附源码下载】...

    本文实例讲述了Android开发实现高仿优酷的客户端图片左右滑动切换功能.分享给大家供大家参考,具体如下: 本例是用ViewPager去做的实现,支持自动滑动和手动滑动,不仅优酷网,实际上有很多商城和 ...

  6. android 自定义相机源码,Android 自定义相机及分析源码

    Android 自定义相机及分析源码 使用Android 系统相机的方法: 要想让应用有相机的action,咱们就必须在清单文件中做一些声明,好让系统知道,如下 action的作用就是声明action ...

  7. android 图片查看源码,Android 简单的图片查看器源码

    public class MainActivity extends Activity { private EditText et_path; private ImageView iv; //创建han ...

  8. android 手机壁纸源码,Android设置手机壁纸-源码(WallPaper)

    Android设置手机壁纸-源码(WallPaper) /** * Andorid设置手机屏幕的壁纸 * * @description: * @author ldm * @date 2016-5-4 ...

  9. android简单记账源码,Android+个人记账程序源码.rar(入门级)

    [实例简介]Android 个人记账程序源码,入门级源码,适合新手... [实例截图] [核心代码] package com.cola.ui; import java.util.Calendar; i ...

最新文章

  1. sh计算机,计算机教程:shellII(sh).pdf
  2. C#和Java在重写上的区别
  3. 【mysql的编程专题⑥】视图
  4. linux bes二进制查看工具,Linux的命令及工具
  5. 深入dwr2-commet模式
  6. STL 自定义sort 前缀和差分练习
  7. 从苹果创业神话看资本运营应集中优势兵力
  8. Python调用kafka构建完整实例分析与应用!
  9. Markdown编辑神器Typora最终免费版
  10. 嵌入式QTlinux 工程编译
  11. 智能手机+DIY红外=万能遥控器
  12. 如何在iPhone或iPad上使用Safari私人浏览
  13. C++数据类型【笔记】
  14. Gerrit历史记录查询
  15. 4.6 Cache Write Policy
  16. Weiler-Athenton算法
  17. 深入理解java虚拟机gc_jvm GC收集器与内存分配(深入理解java虚拟机第三章)
  18. PHP 微信名片生成
  19. python混淆加密ios代码_用AES(MODE_CBC/NoPadding)解密用Python加密的iOS文件
  20. 为什么说小度智能屏是下一代操作系统?

热门文章

  1. 猜价格游戏c语言课程设计,肿么用C#编写一个猜价格的小程序?
  2. 文本文件和二进制文件的区别和联系
  3. 2021 年 Kubernetes 的开发者工具:Helm、Kustomize 和 Skaffold
  4. 由C注释向C++注释转换简单实现
  5. java.lang.arr_以太坊常见问题和错误 / java.lang.ArrayIndexOutOfBoundsException? - 汇智网...
  6. MapReduce之求各个部门工资的总和
  7. pymysql.err.OperationalError: (1136, “Column count doesn‘t match value count at row 1“)报错反省。
  8. 教师计算机课游戏教学设计,有趣的游戏教学设计及课堂实录
  9. 计算机改名字sql2008不能登录,Win7电脑修改计算机名称后SQL2008数据库无法登录提示无法连接到load怎么处理...
  10. Loj一本通刷题记录