设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间03 现在时间03 缓存数据 老薛的歌仿佛是浮躁嘈杂的生活中的一抹黑暗的温柔,暴力、虚假、浮夸…当世间的丑陋充斥于生活,黑暗也可以成为短暂停留的一抹温柔。《尘》于世间,无奈《配合》,但他给了我们温柔。

老薛的歌仿佛是浮躁嘈杂的生活中的一抹黑暗的温柔,暴力、虚假、浮夸…当世间的丑陋充斥于生活,黑暗也可以成为短暂停留的一抹温柔。《尘》于世间,无奈《配合》,但他给了我们温柔。 -- 配合

查看: 1402|回复: 2

Android深色模式适配适配过程详解

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:224
  • 打卡月天数:0
  • 打卡总奖励:3433
  • 最近打卡:2025-03-17 07:10:02
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
408
主题
377
精华
0
金钱
4658
积分
845
注册时间
2023-1-6
最后登录
2025-5-31

发表于 2023-5-12 22:03:23 | 显示全部楼层 |阅读模式
230443n6t1iit12q6ixr2p.png

230444tvb3rpb3e8trcvwu.png


Android 深色模式适配


深色主题背景

Android 10 (API 级别 29) 及更高版本中提供深色主题背景。深色主题背景具有诸多优势:

  • 可大幅减少耗电量(具体取决于设备的屏幕技术)。
  • 为弱视以及对强光敏感的用户提高可视性。
  • 让所有人都可以在光线较暗的环境中更轻松地使用设备。
深色主题背景同时适用于 Android 系统界面和在设备上运行的应用。

在应用中支持深色主题背景

如要支持深色主题背景,必须将应用的主题背景(通常可在
  1. res/values/styles.xml
复制代码
中找到)设置为继承
  1. DayNight
复制代码
主题背景:
  1. <style name="AppTheme" parent="Theme.AppCompat.DayNight">
复制代码
或者使用
  1. MaterialComponent
复制代码
的深色主题背景:
  1. <style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
复制代码
这会将应用的主要主题背景与系统控制的夜间模式标记相关联,并将应用的默认主题背景设置为深色主题背景(如果已启用)。

主题背景和样式

主题背景和样式应避免使用旨在于浅色主题背景下使用的硬编码颜色或图标。应改用主题背景属性(首选)或适合在夜间使用的资源。
以下是需要了解的两个最重要的主题背景属性:

    1. ?android:attr/textColorPrimary
    复制代码
    这是一种通用型文本颜色。它在浅色主题背景下接近于黑色,在深色主题背景下接近于白色。该颜色包含一个停用状态。
    1. ?attr/colorControlNormal
    复制代码
    一种通用图标颜色。该颜色包含一个停用状态。

Force Dark

Android 10 提供 Force Dark 功能。此功能可让开发者快速实现深色主题背景,而无需明确设置 DayNight 主题背景。
如果应用采用浅色主题背景,则 Force Dark 会分析应用的每个视图,并在相应视图在屏幕上显示之前,自动应用深色主题背景。有些开发者会混合使用 Force Dark 和本机实现,以缩短实现深色主题背景所需的时间。
如果应用选择启用 Force Dark,可以在其主题背景中设置
  1. android:forceDarkAllowed="true"
复制代码
。此属性会在所有系统及 AndroidX 提供的浅色主题背景(例如 Theme.Material.Light)上设置。
  1. <resources>
  2.     <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
  3.         <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
  4.         <item name="android:colorPrimary">@color/colorPrimary</item>
  5.         <item name="android:colorAccent">@color/colorAccent</item>
  6.         <item name="android:background">@color/colorPrimary</item>
  7.         <item name="windowNoTitle">true</item>
  8.                 <!-- 启用 Force Dark -->
  9.                 <item name="android:forceDarkAllowed">true</item>
  10.     </style>
  11. </resources>
复制代码
如果应用使用深色主题背景(例如Theme.Material),则系统不会应用 Force Dark。同样,如果应用的主题背景继承自 DayNight 主题背景,则系统不会应用 Force Dark,因为会自动切换主题背景。

在视图上停用 Force Dark

您可以通过
  1. android:forceDarkAllowed
复制代码
布局属性或
  1. setForceDarkAllowed()
复制代码
在特定视图上控制 Force Dark。

Android 10以上

创建项目SDK选择API29: Android 10以上,res目录下会分别创建浅色和深色的主题样式。
230444fdj6deqr2fple6o6.png

其中
  1. values/themes.xml
复制代码
存放浅色模式主题,
  1. values-night/themes.xml
复制代码
存放深色模式主题。
如要切换主题背景,可以调用
  1. AppCompatDelegate.setDefaultNightMode()
复制代码


配置变更

当应用的主题背景发生更改(无论是通过系统设置还是 AppCompat)时,会触发 uiMode 配置变更。这意味着系统会自动重新创建 Activity。
在某些情况下,可能希望应用处理配置变更。例如,可能希望延迟配置变更时间,因为设备正在播放视频。
应用可以声明,每个 Activity 都可以处理 uiMode 配置变更,以自行处理深色主题背景的实现:
  1. <activity
  2.     android:name=".MyActivity"
  3.     android:configChanges="uiMode" />
复制代码
当某个 Activity 声明它会处理配置变更时,系统会在出现主题背景变更时调用该 Activity 的
  1. onConfigurationChanged()
复制代码
方法。
如要检查当前采用的是哪种主题背景,应用可以运行如下代码:
  1. @Override
  2. public void onConfigurationChanged(@NonNull Configuration newConfig) {
  3.     super.onConfigurationChanged(newConfig);
  4.     int currentNightMode = newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
  5.     switch (currentNightMode) {
  6.         case Configuration.UI_MODE_NIGHT_NO:
  7.             // Night mode is not active, we're using the light theme
  8.             Log.i(TAG, "onConfigurationChanged: light");
  9.             break;
  10.         case Configuration.UI_MODE_NIGHT_YES:
  11.             // Night mode is active, we're using dark theme
  12.             Log.i(TAG, "onConfigurationChanged: dark");
  13.             break;
  14.         default:
  15.             break;
  16.     }
  17. }
复制代码
到此这篇关于Android深色模式适配适配过程详解的文章就介绍到这了,更多相关Android深色模式内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
12
积分
4
注册时间
2023-11-25
最后登录
2023-11-25

发表于 2024-9-12 21:51:26 | 显示全部楼层
路过,支持一下
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
12
积分
4
注册时间
2024-12-14
最后登录
2024-12-14

发表于 2025-4-8 02:15:22 | 显示全部楼层
顶顶更健康!!!
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表