今天我们就来了解一下AndroidQ的亮点之一——深色主题,它作为官方主推的亮点之一,有如下几个优点:

1、可大幅减少耗电量(具体取决于设备的屏幕技术)。

2、为弱视以及对强光敏感的用户提高可视性。

3、让所有人都可以在光线较暗的环境中更轻松地使用设备

我们在设置->显示->深色模式可以找到它的开关。

那是不是所有app都需要适配这个模式呢,答案是否定的,只有你的app想要给用户深浅模式的选择时,才需要进行适配(当然这只是深浅模式的一种实现方式)。

首先我们介绍一种最简单的适配方案,如果你的app当前是浅色主题背景(比如Theme.AppCompat.Light),那么你可以直接在其主题设置中加上下面的设置

android:forceDarkAllowed="true"

如果你直接在value/style.xml文件中加入这个配置,系统会提示你把配置放到values-v29目录下,因为这个配置只会在target29的机器上生效,同时,记得把compileSdkVersion指定为29。完了之后你就可以重新编译了。安装app,打开系统设置,切换深色模式,你将看到一套深色的UI。

以上是系统自动帮你做的适配,但如果你使用的主题是深色主题或者系统适配出来的效果达不到你的预期,那么你可以选择下面一种方式手动适配。

首先,你必须将应用的主题背景(通常可在 res/values/styles.xml 中找到)设置为继承 DayNight 主题背景:

然后,就是对资源目录进行适配,通常是在资源文件夹的名字加-night,比如values-night,然后,我们就可以在这个文件夹下将需要适配的文件进行拷贝,替换。举个例子。比如现在我们有个Textview,它的textColor属性我采用软编码的方式,在color.xml文件中定义为id为main_text_color的颜色资源,如果我需要对这个Textview的textColor进行适配,那我就需要在values-night/color.xml中也定义一个id为main_text_color的颜色资源,然后给它指定深色模式下的颜色值。drawable下的文件适配也是同理。

默认情况下,app的深浅模式是跟随系统的,我们也可以在app内部对深浅模式进行指定,如下

AppCompatDelegate.setDefaultNightMode();

它接受4个int型的参数:

浅色 - MODE_NIGHT_NO

深色 - MODE_NIGHT_YES

由省电模式设置 - MODE_NIGHT_AUTO_BATTERY

系统默认 - MODE_NIGHT_FOLLOW_SYSTEM

默认情况下,深浅模式切换会导致界面的重新创建(和语言切换或横竖屏切换一样 ),所以如果我们有不希望重新创建的界面,可以在清单文件中对应的组件配置uiMode,如下

android:name=".MyActivity"

android:configChanges="uiMode" />

然后在MyActivity重写onConfigurationChanged() 方法,这样,当有深浅模式切换时,界面就不会重新创建,而是回调onConfigurationChanged() 方法,你需要自己去处理相应的逻辑,我们可以通过如下方式获取当前的系统设置的深浅模式:

int currentNightMode = configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK;

switch (currentNightMode) {

case Configuration.UI_MODE_NIGHT_NO:

// Night mode is not active, we're using the light theme

break;

case Configuration.UI_MODE_NIGHT_YES:

// Night mode is active, we're using dark theme

break;

}

OK,到这里,AndroidQ的深浅模式适配基本就完成了。

android 技术亮点,AndroidQ亮点之一:深色主题相关推荐

  1. Android深色主题背景的实现及主题背景颜色互换

    layout: post title: Android深色主题背景的实现及主题背景颜色互换 date: 2-12-03 21:52:38 发布 author: 'zhangtao' header-im ...

  2. Android 11.0 系统禁用深色主题背景功能

    1.前言 在11.0的系统rom定制化开发中,在11.0的原生系统中,默认有正常背景和深色主题背景,当系统设置深色主题背景或者进入省电模式情况下会进入 深色主题背景模式这样就会导致系统页面都是黑色的显 ...

  3. Android 10深色主题适配踩坑记录

    1. 问题简述 Android 10 推出了深色主题,便于用户根据白天和夜晚自由切换合适的主题.在适配的过程中,要特别注意,切换主题会导致当前activity被重建,也就是会重新走一遍Activity ...

  4. Android 10.0 系统禁用深色主题背景功能

    目录 1.概述 2.系统禁用深色主题背景功能相关核心代码

  5. Android10.0 特性 - 暗黑模式、深色主题

    关于项目的各种主题样式是很常见的一个功能,尤其是在一些音乐类型的app中更常见,之前在看Android10的时候有说过新特性中加入了 "暗黑模式",正好有机会一起讲一下 (最近忙的 ...

  6. 安卓11客制需求:在设定时间开启深色主题模式,21点开启,次日8点关闭

    控制深色模式开启方式的代码在这个路径下面:frameworks/base/core/res/res/values/config.xml 这里可以看到注释里有三个值可以选,系统默认选择的是1,也就是不开 ...

  7. 【官方推荐方式】【原创】安卓换肤踩坑纯色模式app使用attr轻松实现定制颜色主题和深色主题...

    如果在网上搜换肤,方案五花八门,但是根据app的需求,以及无设计师的情况下,基本上简约风格app,这种风格下只需要几个颜色就行了,根本不需要动态从磁盘加载皮肤apk,而且通过反射操作侵入性太强,因此a ...

  8. Android技术大牛blog

    Focus on technology, enjoy life!-- 杨焕州 QQ:804212028 原文链接:http://blog.csdn.net/y18334702058/article/d ...

  9. ANDROID L——Material Design详解(主题和布局)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

最新文章

  1. Linux 标准目录结构 FHS
  2. C# 存储过程 分页
  3. Silverlight C# 游戏开发:L2 自定义模型导入
  4. html5 canvas画布上合成
  5. APPCAN学习笔记002---app快速开发AppCan.cn平台特色
  6. ie6的png24问题
  7. 吃核桃仁有什么好处?
  8. flex学习笔记 数据验证
  9. Linux自学:常用删除命令(rm)使用方法
  10. 跟我一起玩转A870省电内核、超频内核
  11. MySQL获取汉字的拼音首字母
  12. Python数据分析基础之CSV文件(5)
  13. 简明python指南(预览版)
  14. C语言分支/顺序作业总结
  15. 3、SYN-SENT
  16. iOS8 对开发人员来说意味着什么?
  17. php域名免备案转发,免备案高防CDN支持过墙域名跳转解决域名DNS污染
  18. STM32 精确控制PWM脉冲个数
  19. Zookeeper Java 客户端 ——Apache Curator
  20. php个人编程词典,【编程词典】php htmlentities()函数

热门文章

  1. 发现一个适合程序员的画图软件SketchBook,画个发动机气缸驱动线圈发电图
  2. 九星创客系统开发模式介绍
  3. 使用RMAN的备份及恢复一例-丢失所有控制文件
  4. 读书笔记2014第4本:程序员修炼之道-从小工到专家(第一章)
  5. 虚拟局域网VLAN的简介
  6. tinymce标准配置,和自定义每个按钮配置
  7. 任务中国的特点与赚钱技巧
  8. 容联云通讯的学习笔记二
  9. struts多模块开发
  10. 关于mini pcie的一些笔记