Android 10 提供 Force Dark 功能。此功能可让开发者快速实现深色主题背景,只需要在 style.xml 中的应用主题中添加这一行代码android:forceDarkAllowed=“true” ,就可以完成自动适配。

效果对比如下图所示。从结果来看,整体的界面风格好像确实变成了暗黑模式,但是菜单栏并未适配,所以这里我并不推荐你使用这种自动化的方式来实现深色主题,而是应该使用更加复杂一点的实现方式——自定义适配。

图1 正常情况 图2 Force Dark适配

自定义适配

  1. 将App 使用的主题从之前默认的 Light 主题修改为 DayNight
  1. 右击res目录 -> New -> Directory,创建一个values-night目录,然后右击values-night目录 -> New -> Values resource file,创建一个colors-night.xml文件。接着在这个文件中指定深色主题下的颜色值,颜色的命名要与colors.xml相同。

–colors.xml

#008577

#00

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

574B

#D81B60

#000

–colors-night.xml

#303030

#232323

#008577

#FFFFFF

  1. 为那些在切换为暗黑模式时,需要改变颜色的控件适配,这里我们以TextView为例。

<TextView

android:id="@+id/name"

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:textColor="@color/colorTextView"

android:padding=“10dp”

android:textSize=“20sp”

app:layout_constraintLeft_toLeftOf=“parent”

app:layout_constraintTop_toTopOf=“parent” />

效果对比如下图。效果明显比自动适配好上不少,算是初步实现了对暗黑模式的适配。

手动切换暗黑模式


目前为止我们已经知道了如何适配暗黑模式,在完成适配之后,我们还需要为用户提供在运行时,切换主题的选项,切换的代码也很简单,在菜单监听中通过getDelegate().setLocalNightMode()来设置当前的模式。

@Override

public boolean onOptionsItemSelected(MenuItem mi){

if(mi.isCheckable()){

mi.setChecked(true);

}

switch (mi.getItemId()){

case R.id.mode_light:

getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);

break;

case R.id.mode_dark:

getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);

break;

case R.id.mode_system:

getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);

break;

}

return true;

}

setLocalNightMode()方法接收一个mode参数,用于控制当前应用程序的夜间模式。mode参数主要有以下值可供选择:

  1. MODE_NIGHT_FOLLOW_SYSTEM:默认模式,表示让当前应用程序跟随系统设置来决定使用浅色主题还是深色主题。

Android 适配Dark Theme(暗黑模式),Android高级工程师必备知识相关推荐

  1. Android 适配Dark Theme(暗黑模式),看完跪了

    Force Dark自动适配 Android 10 提供 Force Dark 功能.此功能可让开发者快速实现深色主题背景,只需要在 style.xml 中的应用主题中添加这一行代码android:f ...

  2. android 主题xml,自定义Android主题风格theme.xml方法 Android开发技术

    自定义Android主题风格theme.xml方法 Android开发技术 2013 年 5 月 23 日 在Android中可以通过自定义主题风格方式来实现个性化以及复用,首先我们创建theme.x ...

  3. Android App Dark Theme(暗黑模式)适配指南,android实战mysql

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v2qd7l5a-1636430548017)(https://user-gold-cdn.xitu.io/2020/3/ ...

  4. Android App Dark Theme(暗黑模式)适配指南

    在 2019 年的 Google I/O 和 Apple WWDC 上,新露面的 Android 10 和 iOS 13 都宣布将支持 Dark Theme 也就是我们常说的暗黑模式,并提供相关 AP ...

  5. uniapp和5+app适配苹果iOS13暗黑模式教程

    iOS13开始苹果引入了暗黑模式(DarkMode),在黑暗模式下,系统界面配色都会相应变暗,同时App也需要进行适配. HBuilderX2.6.3+版本开始支持对暗黑模式的适配处理. 全局开启暗黑 ...

  6. android 开机进入命令行模式,android 命令行模式启动模拟器

    启动模拟器需要两个步骤: 1.创建AVD(Android Virtual Device) 2.启动emulator 一般使用Eclipse开发时,开启一个模拟器就是这么一个过程,其实命令行模式下也是这 ...

  7. android 适配红米,小米MIUI放出Android Q适配计划,11款手机参与,包括红米Note 7

    原标题:小米MIUI放出Android Q适配计划,11款手机参与,包括红米Note 7 谷歌在今年五月份发布了最新的Android Q系统,虽然很多国产手机还没有升级到Android P,但是还是有 ...

  8. Android高级工程师必备知识!Android学习路线指南,复习指南

    导语 事情是这样的,一个关注我公众号很久了的朋友,最近跟我说要去面试阿里P6,其实他的水平P7是够了的,他开发了6年,一直在学习新的技术,Flutter,NDK,这些都有涉及,年纪也不是很大26岁,之 ...

  9. android 启动linux命令行模式,Android用命令行启动应用

    Android是基于Linux内核的操作系统,用Java写的应用程序被Android运行时虚拟机运行. 因为Android是基于Linux的,而Linux执行ELF格式的可执行文件,所以用C++编写的 ...

最新文章

  1. 获取预制和获取gameObject
  2. Git——git push 错误[ ! [rejected] master - master (non-fast-forward)]解决方案
  3. 中石油训练赛 - Spiral Matrix(找规律)
  4. html5调盒子边框大小,CSS3 - 盒子大小(CSS3 - Box Sizing)
  5. 初学Vue.js,从头来过~
  6. 【附答案】Java面试2019常考题目汇总(一)
  7. 丹琦女神新作:对比学习,简单到只需要Dropout两下
  8. 中台设计和实践:海量并发业务中台,新业务秒级接入交易中台
  9. linux+tar怎样解压,如何在Linux上使用tar命令解压和压缩文件
  10. vue基础入门-应用 组件实例
  11. win7 apache+php+mysql_win7下手动配置apache+php+mysql记
  12. hdu1247 字典树
  13. 中文同义词近义词库 vs 词向量
  14. 太阳直射点纬度计算公式_地理小常识:买房小技巧,房屋朝向、楼层和太阳高度角的关系...
  15. 如何部署服务器虚拟化,vmware服务器虚拟化方案(vmware虚拟化平台部署)
  16. 四大常用视频接口对比
  17. python广义矩估计_用EVIEWS进行估计时提示Near singular matrix解析
  18. 项目管理体制改革的经验和成效(转)
  19. Java网络编程并实现一对一聊天室功能
  20. sklearn.neighbors.KNeighborsClassifier()函数解析

热门文章

  1. C/C++编程规范整理
  2. vue踩坑笔记06---vuex的state,getter,mustation,action,module
  3. 数据挖掘实验(二):主成分分析PCA R语言
  4. mysql查询男女平均年龄_查询计算机系学生的姓名、性别和年龄
  5. oracle3个重要角色,Oracle 用户及角色 介绍
  6. 深度学习中的归纳性偏好
  7. SpringMVC教程(一)
  8. Python之xlrd读Excel文件问题解决 (python xlrd unsupported format, or corrupt file.)
  9. 推荐5款自学手机APP,请低调收藏,让你变得越来越优秀
  10. javaee学习之路(十五)JSP编程总结