• colorPrimary:主要品牌颜色,一般用于ActionBar背景

  • colorPrimaryDark:默认用于顶部状态栏和底部导航栏

  • colorPrimaryVariant:主要品牌颜色的可选颜色

  • colorSecondary:第二品牌颜色

  • colorSecondaryVariant:第二品牌颜色的可选颜色

  • colorPrimarySurface:对应Light主题指向colorPrimary,Dark主题指向colorSurface

  • colorOn[Primary, Secondary, Surface …],在Primary等这些背景的上面内容的颜色,例如ActioBar上面的文字颜色

  • colorAccent:默认设置给colorControlActivated,一般是主要品牌颜色的明亮版本补充

  • colorControlNormal:图标和控制项的正常状态颜色

  • colorControlActivated:图标和控制项的选中颜色(例如Checked或者Switcher)

  • colorControlHighlight:点击高亮效果(ripple或者selector)

  • colorButtonNormal:按钮默认状态颜色

  • colorSurface:cards, sheets, menus等控件的背景颜色

  • colorBackground:页面的背景颜色

  • colorError:展示错误的颜色

  • textColorPrimary:主要文字颜色

  • textColorSecondary:可选文字颜色

Tips: 当某个属性同时可以通过 ?attr/xxx 或者?android:attr/xxx获取时,最好使用?attr/xxx,因为?android:attr/xxx是通过系统获取,而?attr/xxx是通过静态库类似于AppCompat 或者 Material Design Component引入的。使用非系统版本的属性可以提高平台通用性。

如果需要自定义主题颜色,我们可以对颜色分别定义notnight和night两份,放在values以及values-night资源文件夹中,并在自定义主题时,传入给对应的颜色属性。例如:

res/values/styles.xml

res/values/colors.xml

<?xml version="1.0" encoding="utf-8"?>

#4D71FF

#FFFFFF

#101214

#E0A62E

res/values-night/colors.xml

<?xml version="1.0" encoding="utf-8"?>

#FF584D

#0B0C0D

#F5F7FA

#626469

控件切换颜色

同样的,我们可以在布局的XML文件中直接使用定义好的颜色值,例如

<TextView

android:id="@+id/auto_color_text"

android:text=“自定义变色文字”

android:background="@drawable/bg_text"

android:textColor="@color/color_text_0" />

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android=“http://schemas.android.com/apk/res/android”

android:shape=“rectangle”>

这样这个文字就会在深色模式中展示为黑底白字,在非深色模式中展示为白底黑字。

动态设置颜色

如果需要代码设置颜色,如果色值已经设置过notnight和night两份,那么直接设置颜色就可以得到深色模式变色效果。

auto_color_text.setTextColor(ContextCompat.getColor(this, R.color.color_text_0))

如果色值是从服务接口获取,那么可以使用上述深色模式的判断设置。

auto_color_text.setTextColor(if (isNightMode()) {

Color.parseColor(darkColorFromNetwork)

} else {

Color.parseColor(colorFromNetwork)

})

3. 图片&动画

普通图片&Gif图片

将图片分为明亮模式和深色模式两份,分别放置在drawable-night-xxx以及drawable-xxx文件夹中,并在view中直接使用即可,当深色模式切换时,会使用对应深色模式的资源。如下图所示:

Vector图片


在Vector资源定义时,通过指定画笔颜色来实现对深色模式的适配,例如:

<vector xmlns:android=“http://schemas.android.com/apk/res/android”

android:width=“24dp”

android:height=“24dp”

android:tint="@color/color_light"

android:viewportWidth=“24”

android:viewportHeight=“24”>

<path

android:fillColor="@android:color/white"

android:pathData=“M6.29,14.29L9,17v4c0,0.55 0.45,1 1,1h4c0.55,0 1,-0.45 1,-1v-4l2.71,-2.71c0.19,-0.19 0.29,-0.44 0.29,-0.71L18,10c0,-0.55 -0.45,-1 -1,-1L7,9c-0.55,0 -1,0.45 -1,1v3.59c0,0.26 0.11,0.52 0.29,0.7zM12,2c0.55,0 1,0.45 1,1v1c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1L11,3c0,-0.55 0.45,-1 1,-1zM4.21,5.17c0.39,-0.39 1.02,-0.39 1.42,0l0.71,0.71c0.39,0.39 0.39,1.02 0,1.41 -0.39,0.39 -1.02,0.39 -1.41,0l-0.72,-0.71c-0.39,-0.39 -0.39,-1.02 0,-1.41zM17.67,5.88l0.71,-0.71c0.39,-0.39 1.02,-0.39 1.41,0 0.39,0.39 0.39,1.02 0,1.41l-0.71,0.71c-0.39,0.39 -1.02,0.39 -1.41,0 -0.39,-0.39 -0.39,-1.02 0,-1.41z” />

其中android:tint为叠加颜色,@color/color_light已经分别定义好了notnight和night的色值。

Lottie

对于Lottie动画,我们可以使用Lottie的Dynamic Properties特性来针对深色模式进行颜色变化。例如我们有以下两个动画,左边是由颜色填充的机器人,右边是由描边生成的正在播放动画,我们可以调用LottieAnimationView.resolveKeyPath()方法获取动画的路径。

lottie_android_animate.addLottieOnCompositionLoadedListener {

lottie_android_animate.resolveKeyPath(KeyPath("**")).forEach {

Log.d(TAG, it.keysToString())

}

setupValueCallbacks()

}

对于机器小人打印的KeyPath如下:

2020-09-10 15:30:55.762 29281-29281/com.shengj.androiddarkthemedemo D/DarkThemeDemo: [MasterController]

2020-09-10 15:30:55.762 29281-29281/com.shengj.androiddarkthemedemo D/DarkThemeDemo: [Head]

2020-09-10 15:30:55.762 29281-29281/com.shengj.androiddarkthemedemo D/DarkThemeDemo: [Head, Group 3]

2020-09-10 15:30:55.762 29281-29281/com.shengj.androiddarkthemedemo D/DarkThemeDemo: [Head, Group 3, Fill 1]

2020-09-10 15:30:55.762 29281-29281/com.shengj.androiddarkthemedemo D/DarkThemeDemo: [Blink]

2020-09-10 15:30:55.762 29281-29281/com.shengj.androiddarkthemedemo D/DarkThemeDemo: [Blink, Rectangle 2]

2020-09-10 15:30:55.762 29281-29281/com.shengj.androiddarkthemedemo D/DarkThemeDemo: [Blink, Rectangle 2, Rectangle Path 1]

2020-09-10 15:30:55.762 29281-29281/com.shengj.androiddarkthemedemo D/DarkThemeDemo: [Blink, Rectangle 2,

Android深色模式适配原理分析,android实战开发记账本app视频相关推荐

  1. Android深色模式适配原理分析,android应用开发

    return when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { Configuration.UI ...

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

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

  3. android doze模式源码分析,Android Doze模式启用和恢复详解

    从Android 6.0(API level 23)开始,Android提出了两个延长电池使用时间的省电特性给用户.用户管理可以在没有充电的情况下管理app的行为.当用户一段时间没有使用手机的时候,D ...

  4. Android——一个简单的记账本APP

    一个简单的记账本APP 视频效果预览 添加账目记录 效果预览 添加账目记录实现 简述 实现 获取日期 字符串时间戳转Date Date转星期 获取时间 Switch控制显示和隐藏 更改Switch样式 ...

  5. Android 暗黑模式适配

    Android 暗黑模式适配 不爱废话直接上菜. 第一种适配方式: 1.1 直接修改APP主题,values/styles.xml 如下: <style name="AppTheme& ...

  6. Android手机一键Root原理分析(作者:非虫,文章来自:《黑客防线》2012年7月)

    之前几天都在做Android漏洞分析的项目,万幸发现了这篇文章.废话不多说,上文章! <Android手机一键Root原理分析> (作者:非虫,文章来自:<黑客防线>2012年 ...

  7. Android系统的JNI原理分析(二)- 数据类型转换和方法签名

    声明 前阶段在项目中使用了Android的JNI技术,在此文中做些技术知识总结. 本文参考了一些书籍的若干章节,比如<Android进阶解密-第9章-JNI原理>.<深入理解Andr ...

  8. 事件争夺战 Android事件处理机制与原理分析

    事件争夺战 Android事件处理机制与原理分析 文章目录 事件争夺战 Android事件处理机制与原理分析 View的继承关系 View的事件处理源码 总结: ViewGroup的事件分发源码 总结 ...

  9. Android锁屏机制原理分析

    转载自:http://www.2cto.com/kf/201401/273898.html 春节前最后几天了,工作上几乎没有什么要做.大致整理下之前工作中写的文档,PPT,手册. 由于去年一年完全转到 ...

  10. cocos2d-x 屏幕适配原理分析

    cocos2d-x作为著名的cocos2d游戏开发框架的C++实现者,最近一年发展迅猛.越来越多的app使用它实现快速多平台部署,从最初的ios,android,win32等到新近的html5,实现移 ...

最新文章

  1. 调用android系统自带功能
  2. Android EventBus使用与思路总结
  3. python语言必背代码-Python新手必须知道的25条知识点
  4. python numpy ufunc.reduce(self, a, axis=0, dtype=None, out=None, keepdims=False)函数.(连续执行原始运算对值聚合)
  5. 数据结构与算法 -- 链表
  6. Java中的变量数据类型补充
  7. devops 文化_需要建立DevOps文化
  8. 函数在区间连续可以推出什么_A-22 函数的点连续、单侧连续、区间连续
  9. 相机视场角和焦距_相机参数一览表
  10. caffe学习日记--lesson4:windows下caffe DEMO (mnist and cifar10)
  11. Java制作数独小游戏
  12. linux java sqlldr_sqlldr用法详解
  13. 注册gitlab-runner
  14. 高速公路的一些线路计算
  15. matlab二维绘图plot颜色、线型、点型控制字符
  16. **time_limited.sof文件
  17. 某金融企业核心存储POC测试及选型经验
  18. qtable sorting enable中文是按照什么顺序_漫威电影:22部电影观影顺序(附ZY)
  19. web漏洞-远端WWW服务支持TRACE请求
  20. Unity获取Ui的Posx与Posy以及Width Height和Top Bottom

热门文章

  1. 商道高手不显示服务器,商道高手有多少版本-商道高手有多少客户端
  2. 12306用的是SRCA的根证书——原文标题:在线买火车票为什么要【安装根证书】?
  3. ssm少儿编程网站 计算机毕设源码74792
  4. 数字信号处理的主要内容
  5. iOS总结-网络DNS
  6. 使用Ant构建SSH项目(Intellij IDEA版)
  7. excel季节分离实际案例_这一波经典公式也太给力了,看完觉得十年的Excel白用了!...
  8. HGQYF-C二次压降及负荷测试仪操作程序卡
  9. 媒体实验:AIGC类杂志 1-5期 PDF 领取
  10. SpringBoot整合redis实现数据缓存