原标题: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中,程序在运行时就会自动调用

获取应用当前的主题

intcurrentNightMode=getResources().getConfiguration().uiMode

&Configuration.UI_MODE_NIGHT_MASK;

switch(currentNightMode){

caseConfiguration.UI_MODE_NIGHT_NO:

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

caseConfiguration.UI_MODE_NIGHT_YES:

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

caseConfiguration.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

iOS 用户赞赏通道,谢谢支持

责任编辑:

android support library github,Android Support Library 之 夜间模式相关推荐

  1. android官方夜间模式,Android夜间模式实践

    前言 由于项目需要,近段时间开发的夜间模式功能.主流的方案如下: 1.通过切换theme实现 2.通过resource id映射实现 3.通过Android Support Library的实现 方案 ...

  2. Android夜间模式实践

    前言 由于项目需要,近段时间开发的夜间模式功能.主流的方案如下: 1.通过切换theme实现 2.通过resource id映射实现 3.通过Android Support Library的实现 方案 ...

  3. 【Android】【Android相关网址】Android官方网站索引

    Android官方网站索引 摘要 为了获取最新最权威的Android相关知识,包括源码.开发者指导.技术指南.技术革新.架构变动等,现在整理出Android官方网站的索引列表. 文章目录 Androi ...

  4. android-Google Support Library及Android源码 兼容包下载

    >Android一些SDK比较分裂,为此google官方提供了Android Support Library package 系列的包来保证高版本sdk开发的向下兼容性, 所以你可能经常看到v4 ...

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

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

  6. android log4,GitHub - oronno/log4android: Log4Android - Simple Logging Wrapper Library for Android

    log4android Log4Android - Simple Logging Wrapper Library for Android Tired writing TAG each time wri ...

  7. android 最新 support,android support v7 下载-android support.v7包 官方最新版 - 河东下载站...

    android support v7是一款功能非常实用的android在进行开发的过程中,必须要进行使用的一个包:这款软件作为一个功能非常全面的功能包,也是目前为止最新的功能包,是您这使用Androi ...

  8. Android: Support Libraries for Android.

    http://developer.android.com/sdk/compatibility-library.html SDK Manager中下载 Extras/Android Support pa ...

  9. android:关于主工程和library project

    1.如何将一个android工程作为库工程(library project)library project是作为jar包被其它android工程使用的,首先它也是普通的android工程.然后:1)在 ...

最新文章

  1. Python中使用ElementTree解析xml
  2. 用java怎么实现数据库_用Java实现数据库应用系统
  3. 4 交换机-fanout(订阅发布模式)
  4. JAVA用JComboBox_java JCombobox和JList的使用
  5. python播放在线音乐_Python实现在线音乐播放器
  6. 使用SIFT匹配金馆长表情包
  7. wamp phpcms部署网站问题
  8. 《设计原本—计算机科学巨匠Frederick P. Brooks的反思》一一第 2 章 工程师怎样进行设计思维―理性模型 2.0...
  9. 传统的继承在JavaScript中的应用
  10. 熊逸《唐诗50讲》聚散篇 - 学习笔记与感想
  11. 大唐杯5G题库大全(1)
  12. SMT操作手册V1.0 模板
  13. 用blender环绕物体拍摄
  14. IAR调试stm8的优化设置
  15. 豪饮舍得酒,郭广昌刀口舔血
  16. 迈向云原生开发,我眼中的云原生
  17. AI人工智能毕业设计课题:植物识别,植物识别系统
  18. 给服务器下载补丁及安装补丁
  19. 凯云水利水电工程造价系统 (三) 材料单价 (2)
  20. 【转】 浅谈Radius协议

热门文章

  1. 揭秘Python并发编程——协程
  2. 剑指offer题目汇总
  3. 连接MySql出现异常解决:java.sql.SQLException: The server time zone value is unrecognized or represents。
  4. Mysql data type(数据类型)
  5. php 文件加载方式
  6. K-Means ++ 算法
  7. qt.pro转成vs程序
  8. Unity3D-声音系统
  9. Leetcode--870. 优势洗牌
  10. sql获取日期相差天数oracle,找到oracle sql中两个日期之间的经过时间