Android深色模式适配原理分析,android实战开发记账本app视频
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视频相关推荐
- Android深色模式适配原理分析,android应用开发
return when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { Configuration.UI ...
- android自动切换暗色,超实用!Android 深色模式适配(可定时开启的APP内主题切换管理工具)...
前言 前面分享了一篇"黑白化主题"的文,主要适用场景是不久就要到来的"清明"等时节或者是其他的国家公祭日什么的(一名成熟的程序员,要学会自己提产品需求). 今天 ...
- android doze模式源码分析,Android Doze模式启用和恢复详解
从Android 6.0(API level 23)开始,Android提出了两个延长电池使用时间的省电特性给用户.用户管理可以在没有充电的情况下管理app的行为.当用户一段时间没有使用手机的时候,D ...
- Android——一个简单的记账本APP
一个简单的记账本APP 视频效果预览 添加账目记录 效果预览 添加账目记录实现 简述 实现 获取日期 字符串时间戳转Date Date转星期 获取时间 Switch控制显示和隐藏 更改Switch样式 ...
- Android 暗黑模式适配
Android 暗黑模式适配 不爱废话直接上菜. 第一种适配方式: 1.1 直接修改APP主题,values/styles.xml 如下: <style name="AppTheme& ...
- Android手机一键Root原理分析(作者:非虫,文章来自:《黑客防线》2012年7月)
之前几天都在做Android漏洞分析的项目,万幸发现了这篇文章.废话不多说,上文章! <Android手机一键Root原理分析> (作者:非虫,文章来自:<黑客防线>2012年 ...
- Android系统的JNI原理分析(二)- 数据类型转换和方法签名
声明 前阶段在项目中使用了Android的JNI技术,在此文中做些技术知识总结. 本文参考了一些书籍的若干章节,比如<Android进阶解密-第9章-JNI原理>.<深入理解Andr ...
- 事件争夺战 Android事件处理机制与原理分析
事件争夺战 Android事件处理机制与原理分析 文章目录 事件争夺战 Android事件处理机制与原理分析 View的继承关系 View的事件处理源码 总结: ViewGroup的事件分发源码 总结 ...
- Android锁屏机制原理分析
转载自:http://www.2cto.com/kf/201401/273898.html 春节前最后几天了,工作上几乎没有什么要做.大致整理下之前工作中写的文档,PPT,手册. 由于去年一年完全转到 ...
- cocos2d-x 屏幕适配原理分析
cocos2d-x作为著名的cocos2d游戏开发框架的C++实现者,最近一年发展迅猛.越来越多的app使用它实现快速多平台部署,从最初的ios,android,win32等到新近的html5,实现移 ...
最新文章
- 调用android系统自带功能
- Android EventBus使用与思路总结
- python语言必背代码-Python新手必须知道的25条知识点
- python numpy ufunc.reduce(self, a, axis=0, dtype=None, out=None, keepdims=False)函数.(连续执行原始运算对值聚合)
- 数据结构与算法 -- 链表
- Java中的变量数据类型补充
- devops 文化_需要建立DevOps文化
- 函数在区间连续可以推出什么_A-22 函数的点连续、单侧连续、区间连续
- 相机视场角和焦距_相机参数一览表
- caffe学习日记--lesson4:windows下caffe DEMO (mnist and cifar10)
- Java制作数独小游戏
- linux java sqlldr_sqlldr用法详解
- 注册gitlab-runner
- 高速公路的一些线路计算
- matlab二维绘图plot颜色、线型、点型控制字符
- **time_limited.sof文件
- 某金融企业核心存储POC测试及选型经验
- qtable sorting enable中文是按照什么顺序_漫威电影:22部电影观影顺序(附ZY)
- web漏洞-远端WWW服务支持TRACE请求
- Unity获取Ui的Posx与Posy以及Width Height和Top Bottom
热门文章
- 商道高手不显示服务器,商道高手有多少版本-商道高手有多少客户端
- 12306用的是SRCA的根证书——原文标题:在线买火车票为什么要【安装根证书】?
- ssm少儿编程网站 计算机毕设源码74792
- 数字信号处理的主要内容
- iOS总结-网络DNS
- 使用Ant构建SSH项目(Intellij IDEA版)
- excel季节分离实际案例_这一波经典公式也太给力了,看完觉得十年的Excel白用了!...
- HGQYF-C二次压降及负荷测试仪操作程序卡
- 媒体实验:AIGC类杂志 1-5期 PDF 领取
- SpringBoot整合redis实现数据缓存