Android 适配Dark Theme(暗黑模式),看完跪了
Force Dark自动适配
Android 10 提供 Force Dark 功能。此功能可让开发者快速实现深色主题背景,只需要在 style.xml 中的应用主题中添加这一行代码android:forceDarkAllowed=“true” ,就可以完成自动适配。
效果对比如下图所示。从结果来看,整体的界面风格好像确实变成了暗黑模式,但是菜单栏并未适配,所以这里我并不推荐你使用这种自动化的方式来实现深色主题,而是应该使用更加复杂一点的实现方式——自定义适配。
图1 正常情况 |
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
开源分享完整内容戳这里
img.cn/20200609234059150.png">图2 Force Dark适配
自定义适配
- 将App 使用的主题从之前默认的 Light 主题修改为 DayNight
- 右击res目录 -> New -> Directory,创建一个values-night目录,然后右击values-night目录 -> New -> Values resource file,创建一个colors-night.xml文件。接着在这个文件中指定深色主题下的颜色值,颜色的命名要与colors.xml相同。
–colors.xml
#008577
#00574B
#D81B60
#000
–colors-night.xml
#303030
#232323
#008577
#FFFFFF
- 为那些在切换为暗黑模式时,需要改变颜色的控件适配,这里我们以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参数主要有以下值可供选择:
MODE_NIGHT_FOLLOW_SYSTEM:默认模式,表示让当前应用程序跟随系统设置来决定使用浅色主题还是深色主题。
MODE_NIGHT_YES:脱离系统设置,强制让当前应用程序使用深色主题。
MODE_NIGHT_NO:脱离系统设置,强制让当前应用程序使用浅色主题
MODE_NIGHT_AUTO_BATTERY:根据手机的电池状态来决定使用浅色主题还是深色主题,如果开启了节点模式,则使用深色主题。
需要注意的是,当调用setLocalNightMode()方法并成功切换主题时,应用程序中所有处于started状态的Activity都会被重新创建,那如果不想Activity重新创建Activity怎么切换主题呢?
这时候我们可以在AndroidManifest中将configChanges设置为uiMode,使当前的Activity避免被重新创建。
<application
android:allowBackup=“true”
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl=“true”
android:configChanges=“uiMode”
Android 适配Dark Theme(暗黑模式),看完跪了相关推荐
- Android 适配Dark Theme(暗黑模式),Android高级工程师必备知识
Android 10 提供 Force Dark 功能.此功能可让开发者快速实现深色主题背景,只需要在 style.xml 中的应用主题中添加这一行代码android:forceDarkAllowed ...
- [Android] Android 6.0 动态权限申请看完就会写
Android 6.0 动态权限申请看完就会写 文章目录 Android 6.0 动态权限申请看完就会写 1. 起 2. 权限 3. 四个方法 4. 使用 5. 总结 1. 起 Android 的动态 ...
- Android App Dark Theme(暗黑模式)适配指南
在 2019 年的 Google I/O 和 Apple WWDC 上,新露面的 Android 10 和 iOS 13 都宣布将支持 Dark Theme 也就是我们常说的暗黑模式,并提供相关 AP ...
- Android App Dark Theme(暗黑模式)适配指南,android实战mysql
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v2qd7l5a-1636430548017)(https://user-gold-cdn.xitu.io/2020/3/ ...
- uniapp和5+app适配苹果iOS13暗黑模式教程
iOS13开始苹果引入了暗黑模式(DarkMode),在黑暗模式下,系统界面配色都会相应变暗,同时App也需要进行适配. HBuilderX2.6.3+版本开始支持对暗黑模式的适配处理. 全局开启暗黑 ...
- java电商项目描述面试,看完跪了
为了更好的梳理相关知识,咱们先看纯手绘知识体系图 1.1 Kafka知识体系大纲 由于我手绘这些知识体系大纲是用的xmind软件,无法上传,所以都以截图的形式展示,细节处不清楚(毕竟图片形式有限) 1 ...
- java语言程序设计教程第三版答案,看完跪了
01 如何理解高并发? 高并发意味着大流量,需要运用技术手段抵抗流量的冲击,这些手段好比操作流量,能让流量更平稳地被系统所处理,带给用户更好的体验. 我们常见的高并发场景有:淘宝的双11.春运时的抢票 ...
- 2021我的Android大厂面试之旅!看完这篇彻底明白了
本专栏专注分享大型Bat面试知识,后续会持续更新,喜欢的话麻烦点击一个关注 面试官: 组件化如何实现,组件化与插件化的差别在哪里,该怎么选型 心理分析:面试官从架构层次 了解求职者是否用过 模块化 组 ...
- android 华为版本历史,一文看完华为EMUI发展史
IT之家8月8日消息 今日,华为终端官方发文EMUI回顾史,我们来看一下吧. EMUI1.0合一桌面化繁为简 EMUI1.0是Emotion UI的首次更迭,实现桌面和主菜单的合二为一,减少多余的操作 ...
最新文章
- 收藏 | 神经网络的 5 种常见求导,附详细的公式过程
- python可以从事什么工作-学Python能干什么工作?工作前景怎么样?
- oracle中minus
- SQLite.NET.0.17 的离奇之处, BUG??? BY DESIGN??
- 第三十一讲:UML类图(上)
- Java并发编程—说说Runnable与Callable
- 利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务
- error MSB6006: cmd.exe exited with code 3
- python去掉人像白边_python 使用plt画图,去除图片四周的白边方法
- SpringBoot集成Actuator健康指示器health
- sql语句截取字符串
- 前端 express使用教程
- 激光雷达的障碍物检测
- 如何提高Python编程能力?
- MongoDB中shell基本使用
- 中国结构性心脏病年度报告2020发布会圆满召开!
- 史记翻译-汉初三杰-张良-留侯世家第二十五
- CAD可以转换成那个格式?怎么转换CAD格式呢?
- 远程访问服务器Jupyter Notebook的两种方法
- 【AT91SAM7X-EK开发板】系统时钟的配置