前言:作为一个Android程序员,每年最期待就是Google的发布会啦!!这不,今年的AndroidQ如期而至。这里简单介绍一下Android的新特性:

  • AndroidQ全局暗黑模式
  • 隐私权限的更新
  • AndroidQ新版的手势导航(其实就是仿IOS)
  • 系统日程UI的优化(还有其他系统UI上的优化)
  • Google组件(jetpack)的推荐

每年的Google大会一结束就是程序员忙碌工作的开端,各种适配,各种新功能… 一堆事情下来,搞的焦头烂额。 但是今年的发布会之后,仔细一看Q的更新清单,其实需要我们去适配优化的并不多,主要就是隐私权限和黑暗模式需要我们紧急适配。而且黑暗模式和以往的多主题适配是一个道理,这样我们的跟进优化工作就更加简单了。废话不多说,这里我们就来介绍一下在原生系统下进行黑暗模式的适配。

AndroidQ黑暗模式适配

  • 适配原理介绍:黑暗模式和正常模式,无非就是两种主题间的切换(主要是各种背景色,字体颜色和Icon)。因此我们只需要定义两套不同的主题,根据是否是黑暗模式进行主题的切换即可。

详细步骤

  • 判断当前是否处于黑暗模式:用于启动时还在不同的主题
 //检查当前系统是否已开启暗黑模式public static boolean getDarkModeStatus(Context context) {int mode = context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;return mode == Configuration.UI_MODE_NIGHT_YES;}
  • 定义两套主题(正常模式和黑暗模式):即在style文件下自定义两个style,但是必须指定parent为‘Theme.AppCompat.DayNight.DarkActionBar’,如下所示:
//正常模式下的主题<style name="main_theme_light" parent="Theme.AppCompat.DayNight.DarkActionBar"><item name="windowActionBar">false</item><item name="windowNoTitle">true</item><item name="main_text_color">@color/main_text_color_light</item><item name="main_bg_color">@color/main_bg_color_light</item></style>//黑暗模式下的主题<style name="main_theme_dark" parent="Theme.AppCompat.DayNight.DarkActionBar"><item name="windowActionBar">false</item><item name="windowNoTitle">true</item><item name="main_text_color">@color/main_text_color_dark</item><item name="main_bg_color">@color/main_bg_color_dark</item></style>
  • 找出适配黑暗模式需要的属性(主要是颜色属性:背景色、字体颜色和Icon颜色等并给属性赋值),类似如下定义:
供在上一步的style中引用,不同模式下提供不同的值<!--    主要字体颜色--><attr name="main_text_color" format="color" /><!--    主要背景颜色-->    <attr name="main_bg_color" format="color" />//不同模式下的颜色属性值<color name="main_text_color_light">#000000</color><color name="main_text_color_dark">#ffffff</color><color name="main_bg_color_light">#ffffff</color><color name="main_bg_color_dark">#000000</color>
  • 在activity和xml中引用我们自定义的属性:
//在xml文件中使用我们自定义属性
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="?attr/main_bg_color"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"android:textColor="?attr/main_text_color"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>//在BaseActivity中切换不同的主题,才能使我们自定义的属性生效,必须在setContentView()方法前设置:@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {if (getDarkModeStatus(this)) {setTheme(R.style.main_theme_dark);}else {setTheme(R.style.main_theme_light);}setContentView(R.layout.activity_main)}//为达到更好的适配效果,可在xml文件的activity节点下加入如下属性:
android:configChanges="uiMode"

ps:Icon的适配可以借助tint属性切换不同模式的颜色。

总结:到此为止,我们在两个模式下的切换就算完成了,你可以尝试开启系统的黑暗模式,可见我们的几面也会换成黑暗模式下的主题。如果有更多不同主题,那我们的工作就简单了,只需要在style文件下增加主题,并且加入主题下的颜色值就可以了。

AndroidQ(10)黑暗模式适配相关推荐

  1. android 10 apk 存储适配,AndroidQ(10) 分区存储适配方法

    创建文件夹 下载文件 InputStream is = null; byte[] buf = new byte[2048]; int len = 0; FileOutputStream fos = n ...

  2. Android 适配黑暗模式10.0 Q

    首先刚开始 我开始使用了第三方得 Android-skin-support库 因为我的项目是databinding的,升级到最新版本后 库不支持了,所以也是抛弃了,可能是因为这个库的作者工作忙或者是没 ...

  3. 微信又双叒更新7.0.10,除了黑暗模式,还有这些实用功能!

    本文经授权转自差评公众号,如需转载请联系授权 本文经授权转自差评公众号,如需转载请联系授权  也不知道最近微信是怎么了,特别勤快... 可惜的是,虽然更新很勤快,但基本上都是在微调界面的层面,功能上一 ...

  4. 微信 黑暗模式 android,微信更新黑暗模式,但仅限Android 10,苹果用户无法使用...

    17日晚,微信放出最新的安卓内测版 7.0.10. 从版本号来看,仅仅从 7.0.9 增加了 0.0.1. 不过经过 IT之家 的验证发现,在这一版本中,微信已经将大家一直想要的暗黑模式添加进去了. ...

  5. Chrome 74 稳定版发布,Windows 10 支持黑暗模式

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   Chrome 74 稳定版已发布,具体版本号为 Chrome 74.0.3729.108.本次更新包含 39 项安全修复,以及稳定性和用户体 ...

  6. 暗黑模式(黑暗模式,深色模式)适配

    暗黑模式(黑暗模式,深色模式)适配 全局关闭 打开Info.plist 项目配置文件,添加UIUserInterfaceStyle字段,key类型为String, 其value值设置为 Light模式 ...

  7. html5适配ios的黑暗模式

    最近几天app里嵌入的wap页需要做ios黑暗模式的适配,尝试了一下H5的适配,现在把方法记录一下 具体方法如下:原有样式保持不变, 黑暗模式的样式追加在原有样式最后边并且需要嵌套在标签 @media ...

  8. iOS 13 适配,关闭黑暗模式(夜间模式)

    关闭黑暗模式方式,在info.plist中添加  User Interface Style  Light

  9. 微信windows版_安卓首发!微信黑暗模式来了

    微信日前内测7.0.10版,除了修复一些问题之外,最大的变化是加入黑暗模式.不过,令人意外的是,竟然是安卓版首发了这个功能,不像以往那样是iOS首发.PS:请在该订阅号对话框发送"微信&qu ...

最新文章

  1. 4 月 24 日开播!基于神经网络建模的信息传播预测
  2. 反欺诈中所用到的机器学习模型有哪些?
  3. 高速串行自同步方式介绍及原理
  4. Silverlight使用webClient上传下载
  5. HDU - 1796 How many integers can you find(容斥原理)
  6. 深度迁移学习在花生叶部病害图像识别中的应用
  7. Unity3D播放背景音乐
  8. centos 7 下安装haproxy
  9. CentOS7和CentOS8 Asterisk 20.0.0 简单图形化界面5--libss7驱动7号信令
  10. php 跨域提交,php实现跨域提交form表单的方法
  11. c#控件chart制作自动更新的温湿度实时曲线图
  12. Unity 圆形图片实现
  13. DataGridView使用技巧十二:DataGridView Error图标表示的设定
  14. 2019牛客国庆集训派对day5 K(2017四川省赛)
  15. spring实战笔记
  16. 自制ADK To Win11PE,加入原生explorer,初步修改注册表(图文1.1万字,很细) (2)
  17. 英语语法回顾3——名词和名词性从句
  18. 2022年中国智能家居产业链图谱 | 产业链全景图
  19. NAS论文笔记:代理模型篇:NSGA Net V2: Evolutionary Multi-Objective Surrogate-Assisted Neural Architecture Sear
  20. 通达OA11.6复现

热门文章

  1. Struts2类型转换的说明及案例分析
  2. CHIL-SQL-SELECT INTO 语句
  3. 应届生昆山offer和上海户口offer要如何选择?
  4. 转载一篇关于颜色的英文名,算比较全的了!说不定以后用得上!
  5. 行政公益诉讼与民事公益诉讼可相互转化
  6. 民事诉讼法学类毕业论文文献包含哪些?
  7. 《从案例中学习JavaScript》之实现网页版阅读器
  8. ThreadX学习(4)——内存管理
  9. iconic 安装和使用
  10. ImageJ如何测量物体的面积大小