Android Q 推出了深色模式,其实 Android 9 就有了,部分厂商小米,三星就在系统 Android 9 加入了深色模式的开关。

Android 提供了一套夜间模式主题,继承 Theme.MaterialComponents.DayNight.NoActionBar 主题即可。

然后在 res 文件夹创建 values-night 将深色模式的 color.xml 拷贝过来,系统在深色模式下会自动识别该目录下的 color 信息。当然,除了 color 之外的资源也是一样的。

同理 drawable 同样可以创建一个 drawable-night 来区别不同的资源。

判断深色模式

系统有几个 mask 值:

// 深色

public static final int UI_MODE_NIGHT_YES = 0x20;

// 浅色

public static final int UI_MODE_NIGHT_NO = 0x10;

复制代码// 判断是否是深色

context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES

复制代码// 全局设置夜间模式

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)

// 在 App 内部切换主题的时候重新创建 Activity 以应用

recreate()

复制代码

初次进入 App 的时候,如果需要指定 Dark Mode,在你的 Application 中初始化:

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)

复制代码

自定义处理

系统在切换深色/浅色模式时,会在 Actvity/Fragment 中回调

override fun onConfigurationChanged(newConfig: Configuration) {

super.onConfigurationChanged(newConfig)

if(dark){

//

}else{

//

}

}

复制代码

我们只要在这个回调填写 ui 深色变换的逻辑即可。

__注意: Activity 必须注册 android:configChanges="uiMode" 才能收到onConfigurationChanged的回调:

android:name=".ui.main.home.HomeActivity"

android:configChanges="uiMode">

复制代码

基于这些基础,可以沉淀抽象出一套通用的 dake mode 库

一个额外发现

在应用了 Theme.MaterialComponents.DayNight 之后,同时系统切到了深色模式,很多页面的背景变成了全黑,拖动列表 item 还会有残影,在 twitter,知乎,即刻,华为商店,都看到过这种残影效果,之前在酷安看到一个图片中带黑色的局部,拖动图片,图片上的黑色局部也有那种残影效果,推测是利用屏幕的某种特性造成了这种视觉效果。之前我还以为是即刻和知乎自己自定义的这种动画效果。

不过也带来一个额外的问题-(App内部代码层面关闭了深色模式,但是系统的深色模式还开着时,这些页面依然是黑色的)。

这是因为 App 的 value 资源是按系统的深色模式来加载,只要系统的深色模式开着,不管 App 内部是否关闭了深色模式,总是走 value-night 的资源。最后的妥协是放弃在 App 内部自定义切换主题,这样最简单也省去了很多麻烦,(解决 bug 的最好办法,就是砍掉出 bug 的功能。逃

android自动切换暗色,Android 适配深色模式的总结相关推荐

  1. android自动切换暗色,超实用!Android 深色模式适配(可定时开启的APP内主题切换管理工具)...

    前言 前面分享了一篇"黑白化主题"的文,主要适用场景是不久就要到来的"清明"等时节或者是其他的国家公祭日什么的(一名成熟的程序员,要学会自己提产品需求). 今天 ...

  2. android自动切换暗色,根据环境光亮度自动切换,让 Android 10 的暗色主题更智能:Auto Dark Theme...

    从 iOS 13 的暗色模式到 Android 10 的暗色主题,对类似功能的系统级支持是今年的一大热点,也为我们带来了不少便利. 不过大部分围绕暗色模式或暗色主题的自动化实现都是与 时间 紧密挂钩的 ...

  3. android自动切换图片,Android应用中图片浏览时实现自动切换功能的方法详解

    先给最终效果图: 当我们在最下边的gallery中切换图片时,上面的大图片会自动切换,切换时有动画效果哦,很简单的一个程序,有待完善更多的功能! activity代码: package cn.com. ...

  4. Flutter适配深色模式(DarkMode)

    1.瞎叨叨 也不知道写点什么,本来想写写Flutter的集成测试.因为前一阵子给flutter_deer写了一套,不过感觉也没啥内容,写不了几句话就放弃了.(其实本篇内容也不多...) 那就写写最近在 ...

  5. 实现页面适配_微信公众号文章页面适配深色模式

    最近安卓微信7.0.10正式版发布,更新过后,很多用户发现,之前在测试版中对系统深色模式的适配功能被取消了,小伙伴们对此很是不满,好在Android 10系统手机用户占比很少,影响范围还不是很大,并且 ...

  6. iOS13适配深色模式(Dark Mode)

    原文博客地址: iOS13适配深色模式(Dark Mode) 好像大概也许是一年前, Mac OS系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的 终于, 随着iPhone11等新手机的 ...

  7. iOS13适配深色模式(Dark Mode)总结

    iOS13适配深色模式(Dark Mode)总结 好像大概也许是一年前, Mac OS系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的 终于,随着iPhone11等新手机的发售, iOS ...

  8. android开发适配深色模式,手机不支持深色模式,如何用软件解决深色模式的问题?(附有系统全局深色模式实现方法...

    本帖最后由 巷子口的你 于 2020-8-8 07:57 编辑 1.92允许通过设置为助手应用来饮捷切频深色模式(设置入口一般为系统默认应用-助手和语音输人, MIU需要设置为语音助手)提醒:稳定模式 ...

  9. android设置夜间模式切换,android主题切换(简单的白/夜间模式的切换)

    效果图: 实现: android:layout_width="match_parent" android:layout_height="match_parent" ...

最新文章

  1. xlrd.biffh.XLRDError: Excel xlsx file; not supported解决方法
  2. Vue多个单文件组件使用
  3. 《LeetCode力扣练习》第16题 C语言版 (做出来就行,别问我效率。。。。)
  4. Newtonsoft.Json 概述
  5. java httpclient 进度条_如何使用Apache HttpClient 4获取文件上传的进度条?
  6. source, ~/.bashrc, ~/.bash_profile详解
  7. Docker基础入门及示例
  8. Android 入门(四) | Intent 实现 Activity 切换
  9. 【Python】comtypes模块Windows环境下使用批量转换成PDF文件
  10. 使用SQLyog连接MySQL数据库
  11. Fedora17安装SSH
  12. android视频播放器sdk对比,Android项目之android SDK视频播放与vitamio视频播放
  13. linux 替换文件夹内容,Linux批量替换文本,文件夹内所有文本内容
  14. 会员制玩法解说 JAVA会员制商城系统开发
  15. DST与Neural Belief Tracker
  16. Python xlrd读取、处理excel日期类型
  17. 年终总结:2021年最有用的数据清洗 Python 库
  18. Python提取Word文件中的目录标题保存为Excel文件
  19. 助力丽水市周安村“数字乡村”建设 ,复杂美区块链赋能农产品溯源营销
  20. 【调剂】2021年南昌航空大学无损检测技术教育部重点实验室卢超教授团队招优秀调剂研究生...

热门文章

  1. pandas 改列名称_01_Pandas.DataFrame的行名和列名的修改
  2. 使用python的虚拟环境virtualenv
  3. 微博爬虫数据分析可视化程序设计报告
  4. 【SSL 2882】[POJ 3250]排队【单调栈模板】
  5. 我国亟待建立全国危化品安全监管大数据平台
  6. 1.0django入门01
  7. 激光切割dxf图案下载
  8. python特征提取方法_大师兄的Python机器学习笔记:特征提取
  9. VBA中worksheets/sheets/workbook 区别
  10. 焊接机器人VS传统焊接的优势