Android取消深色适配

news2024/11/16 19:54:49

从Android10(API 29)开始,在原有的主题适配的基础上,Google开始提供了Force Dark机制,在系统底层直接对颜色和图片进行转换处理,原生支持深色模式。当系统设置深色主题背景或者进入省电模式情况下会进入深色主题背景模式,这样就会导致系统页面都是黑色的显得很不美观,进入了深色主题模式,产品要求禁用深色主题模式,所以功能开发需要要求禁用深色主题功能。

我们常见的需要设置的资源有drawable、layout、mipmap和values等,对于这些资源,我们可以用一些限定符来表示提供一些备用资源,例如drawable-xhdpi表示超密度屏幕使用的资源,或者layout-land表示横向状态使用的布局。同样的深色模式可以使用资源的限定符-night来表示在深色模式中使用的资源。如下图所示:
在这里插入图片描述
使用了-night限定符的文件夹里面的资源我们称为night资源,没有使用-night限定符的资源我们称为notnight资源。

其中drawable-night-xhdpi可以放置对应超密度屏幕使用的深色模式的图片,values-night可以声明对应深色模式使用的色值和主题。

只需要在values-night下面的themes.xml文件里加入

<resources xmlns:tools="http://schemas.android.com/tools">
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        ......
        <item name="android:forceDarkAllowed" tools:targetApi="q">false</item>
    </style>
</resources>

拓展:深色模式判断&设置

一、判断当前是否深色模式

Configuration.uiMode 有三种NIGHT的模式:

  1. UI_MODE_NIGHT_NO 表示当前使用的是notnight模式资源。
  2. UI_MODE_NIGHT_YES 表示当前使用的是night模式资源。
  3. UI_MODE_NIGHT_UNDEFINED 表示当前没有设置模式。

可以通过以下的代码来判断当前是否处于深色模式:

/**
 * 判断当前是否深色模式
 *
 * @return 深色模式返回 true,否则返回false
 */
fun isNightMode(): Boolean {
  return when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) {
    Configuration.UI_MODE_NIGHT_YES -> true
    else -> false
  }
}

二、判断当前深色模式场景

通过AppCompatDelegate.getDefaultNightMode()可以获取五种深色模式场景:

  1. MODE_NIGHT_AUTO_BATTERY 低电量模式自动开启深色模式。
  2. MODE_NIGHT_FOLLOW_SYSTEM 跟随系统开启和关闭深色模式(默认)。
  3. MODE_NIGHT_NO 强制使用notnight资源,表示非深色模式。
  4. MODE_NIGHT_YES 强制使用night资源。
  5. MODE_NIGHT_UNSPECIFIED 配合 setLocalNightMode(int)) 使用,表示由Activity通过AppCompactActivity.getDelegate()来单独设置页面的深色模式,不设置全局模式。

深色模式设置可以从三个层级设置,从下到上分别是系统层(System Setting)、Applcation层(Application Setting)以及Activity层(Activity Setting)。底层的设置会覆盖上层的设置,例如系统设置了深色模式,但是Application设置了浅色模式,那么应用会显示浅色主题。

  • 系统层(System Setting)是指系统设置中,根据不同产商的手机,可以在设置->显示中修改系统为深色模式。
  • Application层(Application Setting)通过AppCompatDelegate.setDefaultNightMode()设置深色模式。
  • Activity层(Activity Setting)通过getDelegate().setLocalNightMode()设置深色模式。

当深色模式改变时,Activity会重建,如果不希望Activity重建,可以在AndroidManifest.xml中对对应的Activity设置android:configChanges="uiMode",不过设置之后页面的颜色改变需要Activity在中通过监听onConfigurationChanged来动态改变。

通过AppCompatDelegate.setDefaultNightMode(int)可以设置深色模式,源码如下:

public static void setDefaultNightMode(@NightMode int mode) {
  if (DEBUG) {
    Log.d(TAG, String.format("setDefaultNightMode. New:%d, Current:%d",
                             mode, sDefaultNightMode));
  }
  switch (mode) {
    case MODE_NIGHT_NO:
    case MODE_NIGHT_YES:
    case MODE_NIGHT_FOLLOW_SYSTEM:
    case MODE_NIGHT_AUTO_TIME:
    case MODE_NIGHT_AUTO_BATTERY:
      if (sDefaultNightMode != mode) {
        sDefaultNightMode = mode;
        applyDayNightToActiveDelegates();
      }
      break;
    default:
      Log.d(TAG, "setDefaultNightMode() called with an unknown mode");
      break;
  }
}

从源码可以看出设置 MODE_NIGHT_UNSPECIFIED 模式是不会生效的。

Tips:注意,深色模式变化会导致Activity重建。

文章参考:https://blog.csdn.net/chuyouyinghe/article/details/125403415

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1309781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cgteamwork与shotgrid对比

最近有项目接触使用并二开cgteamwork&#xff0c; 也重新认识了cgteamwork&#xff0c;感受到国产软件的强大&#xff0c;国内中小CG公司的首选&#xff0c;原因&#xff1a; 1 上手容易&#xff0c;不会的有售前工程师教&#xff0c;他们全国各地城市到处跑。 感概业务的强大…

Educoder--Linux实验--FTP服务器搭建(第1关~第4关)

第1关 sudo apt-get update sudo apt-get install vsftpd 过程中出现中断时&#xff0c;按“Y”继续。 第2关 sudo service vsftpd start sudo service vsftpd status 第3关 启动vsftpd服务&#xff1b; service vsftpd start 初始化嘎嘎重要&#xff01;&#xff01; …

台式扫描电镜与落地式扫描电镜详细对比

随着材料科学和微纳技术的快速发展&#xff0c;扫描电子显微镜已成为研究微观结构的一种重要工具。根据外形体积的不同&#xff0c;扫描电镜可以分为两大类:落地式扫描电镜和台式扫描电镜。本文将从探测器、易操作性、安装环境和价格等多个方面对两者进行比较。 一、发展历史 …

产品经理必掌握自定义元件流程图泳道图

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a; 《产品经理管理项目周期及【Axure RP9】简介&安装&基本使用》 ⛺️ 越努力 &#xff0c;越幸运 目录 一、什么是自定义元件 1.1如何自定义元件 二、什么是流程图 &…

可替代LM5145,5.5V-100V Vin同步降压控制器_SCT82A30

SCT82A30是一款100V电压模式控制同步降压控制器&#xff0c;具有线路前馈。40ns受控高压侧MOSFET的最小导通时间支持高转换比&#xff0c;实现从48V输入到低压轨的直接降压转换&#xff0c;降低了系统复杂性和解决方案成本。如果需要&#xff0c;在低至6V的输入电压下降期间&am…

销售技巧培训之如何提升金融销售技巧

销售技巧培训之如何提升金融销售技巧 在金融行业&#xff0c;销售技巧是决定业绩成败的关键因素之一。无论是销售保险、股票、债券&#xff0c;还是提供投资咨询服务&#xff0c;都需要掌握一定的销售技巧。本文将探讨如何提升金融销售技巧&#xff0c;通过案例分析&#xff0…

【虹科分享】基于Redis Enterprise,LangChain,OpenAI 构建一个电子商务聊天机器人

如何构建你自己的商务聊天机器人&#xff1f;注意哦&#xff0c;是你自己的聊天机器人。一起来看看Redis Enterprise的向量检索是怎么帮你实现这个愿望的吧。 鉴于最近人工智能支持的API和网络开发工具的激增&#xff0c;似乎每个人都在将聊天机器人集成到他们的应用程序中。 …

倾角仪(xyz)理解

第一列是初始值 x更小&#xff0c;说明往左倾 x更大&#xff0c;说明往右倾 z更大、y更大&#xff0c;说明往后倾 z更小、y更大&#xff0c;说明往前倾

LeetCode 每日一题 Day 12 (Hard)|| 二维前缀和二维差分

2132. 用邮票贴满网格图 给你一个m x n的二进制矩阵 grid &#xff0c;每个格子要么为 0 &#xff08;空&#xff09;要么为 1 &#xff08;被占据&#xff09;。 给你邮票的尺寸为 stampHeight x stampWidth 。我们想将邮票贴进二进制矩阵中&#xff0c;且满足以下 限制 和 …

番茄病虫害检测系统:融合感受野注意力卷积(RFAConv)改进YOLOv8

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 番茄是全球重要的蔬菜作物之一&#xff0c;具有广泛的经济和营养价值。然而&#xff0c;番茄病虫害的严重威胁导致了产量和质量的损失。因此&#xff0c;开发一种…

用23种设计模式打造一个cocos creator的游戏框架----(九)访问者模式

1、模式标准 模式名称&#xff1a;访问者模式 模式分类&#xff1a;行为型 模式意图&#xff1a;将数据操作与数据结构分离&#xff0c;使得在不修改数据结构的前提下&#xff0c;可以添加或改变对数据的操作。 结构图&#xff1a; 适用于&#xff1a; 当你需要对一个复杂对…

遇到运维故障,有没有排查和解决故障的正确流程?

稳定是偶然&#xff0c;异常才是常态&#xff0c;用来标注IT运维工作再适合不过。 因为对于IT运维来说&#xff0c;工作最常遇到的就是不稳定性带来的各种故障&#xff0c;经常围绕发现故障、响应故障、定位故障、恢复故障这四大步。 故障处理是最心跳的事情&#xff0c;没有…

OpenCV-Python15:图像阈值处理

目录 目标 图像阈值及分割算法介绍 简单阈值算法 自适应阈值算法 Otsus 二值化算法 Otsus 二值化原理 目标 通过本文你将学到图像二值化、简单阈值处理、自适应阈值、Otsus 二值化等。将学习的函数有cv2.threshold,cv2.adaptiveThreshold 等。 图像阈值及分割算法介…

GZ029 智能电子产品设计与开发赛题第9套

2023年全国职业院校技能大赛高职组 “GZ029智能电子产品设计与开发”赛项赛卷九 题目&#xff1a;模拟工业传送带物品检测系统的设计与开发 1 竞赛任务 在智能电视机上播放工业传送带传输物品视频&#xff0c;模拟工业传送带物品检测系统&#xff08;以下简称物品检测系统&…

训练效率提升40倍!开源图片生3D模型,Stable Zero123来啦

12月14日&#xff0c;著名生成式AI开源平台Stability.ai在官网开源了&#xff0c;图片生成高质量3D模型——Stable Zero123。 Stable Zero123是基于今年3月&#xff0c;丰田研究院和哥伦比亚大学联合开源的Zero123模型开发而成。主要通过更改渲染数据集和分数蒸馏对模型进行了…

leetcode -- 209 长度最小的子数组[滑动窗口/c++]

原题链接&#xff1a;209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 算法原理&#xff1a; 滑动窗口其实就是同向双指针&#xff0c;因为计算结果的单调性&#xff0c;在符合条件的情况下&#xff0c;左右指针不必往回回溯&#xff0c;而实现优化的效果。 滑…

分布式数据库-课程总结

文章目录 参考资源HBase列族数据库简介与关系数据库的对比存储对比操作语句表级别语句表数据语句 数据库的原理存储结构架构 MongoDB文档数据库简介与关系数据库的对比存储对比操作语句 见PPT 命名规范数据库的原理 Redis键值内存数据库Neo4j图数据库 参考资源 http://172.16.…

佛山数字孪生赋能工业智能制造,助力制造业企业数字化转型

佛山数字孪生赋能工业智能制造&#xff0c;助力制造业企业数字化转型。数字孪生驱动的仿真服务可以模拟产品的各种真实功能&#xff0c;为不同的用户切换不同的应用场景。产品介绍、咨询和体验服务都可以通过产品数字孪生来完成。产品数字孪生在交易时可以交付给客户。产品销售…

HTTP协议请求详解

✏️✏️✏️今天给大家分享的是 HTTP 请求部分的基础知识。 清风的CSDN博客 &#x1f6e9;️&#x1f6e9;️&#x1f6e9;️希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;大家一起学习交流&#xff01; ✈️✈️✈️动动你们发财的小…

大数据与人工智能——神经网络是如何工作的?

大数据与人工智能——神经网络是如何工作的&#xff1f; 我们习惯于去了解所使用工具、中间件的底层原理&#xff0c;本文则旨在帮助大家了解AI模型的底层机制&#xff0c;让大家在学习或应用各种大模型时更加得心应手&#xff0c;更加适合没有AI基础的小伙伴们。 一、GPT与神…