uniapp适配暗黑模式配置plus.nativeUI.setUIStyle适配DarkMode配置
uniapp适配暗黑模式配置
目录
- uniapp适配暗黑模式配置
- setUIStyle
- DarkMode 适配
- app-plus
- `manifest.json`配置
- `theme.json`配置
- `pages.json`配置
- 页面切换代码实现
- 同步手机暗黑配置
- 额外适配
参考官方文档:https://uniapp.dcloud.net.cn/tutorial/darkmode.html
主要用到api:setUIStyle
setUIStyle
设置原生界面样式(暗黑模式)plus.nativeUI.setUIStyle(style);
说明:
iOS13+系统支持暗黑模式,可设置原生界面的外观样式为浅色或深色(暗黑模式)。 即使应用没有设置"全局开启暗黑模式",也可以调用此方法强制设置原生界面外观样式。 HBuilderX2.6.3+版本支持,并且要求iOS13及以上系统。
参数:
style: ( String ) 必选 原生界面样式
可取值:
“light” - 浅色外观样式
“dark” - 深色外观样式(暗黑模式)
“auto” - 根据系统外观样式自动调整,应用需"全局开启暗黑模式”,参考https://ask.dcloud.net.cn/article/36995
DarkMode 适配
app-plus
在 manifest.json -> app-plus 中配置:
配置 darkmode:true
配置 themeLocation,指定变量配置文件 theme.json 路径,例如:在根目录下新增 theme.json,需要配置 "themeLocation":"theme.json"
在 theme.json 中定义相关变量
在 pages.json 中以@开头引用变量
整体配置
"app-plus" : {"darkmode" : true,"themeLocation" : "theme.json" // 如果 theme.json 在根目录可省略}
实现效果:


manifest.json配置
"app-plus" : {"darkmode": true,"themeLocation": "theme.json", // 如果 theme.json 在根目录可省略"safearea": {// 适配ios安全线背景色"background": "#ffffff","backgroundDark": "#1F1F1F","bottom": {"offset": "auto"}},}
theme.json配置
可复制文件自行修改
{"light": {"navigationBarTextStyle": "black","navigationBarBackgroundColor": "#F7F7F7","backgroundColor": "#F7F7F7","tabBarColor": "#939393","tabBarSelectedColor": "#2979ff","tabBarBorderStyle": "black","tabBarBackgroundColor": "#ffffff"},"dark": {"navigationBarTextStyle": "white","navigationBarBackgroundColor": "#1F1F1F","backgroundColor": "#1F1F1F","tabBarColor": "#cacaca","tabBarSelectedColor": "#2979ff","tabBarBorderStyle": "white","tabBarBackgroundColor": "#1F1F1F"}
}
pages.json配置
主要是修改tabbar和globalStyle,
tabbar的icon也可以通过theme.json配置不同的图片,然后通过 @这种方式引入即可。
"tabBar": {"color": "@tabBarColor","selectedColor": "@tabBarSelectedColor","borderStyle": "@tabBarBorderStyle","backgroundColor": "@tabBarBackgroundColor","fontSize": "11px","iconWidth": "20px","iconHeight": "20px","spacing": "5px","list": [{"pagePath": "pages/index/index","text": "首页","iconPath": "static/images/tabbar/home.png","selectedIconPath": "static/images/tabbar/home_select.png"},{"pagePath": "pages/mine/mine","text": "我的","iconPath": "static/images/tabbar/wode.png","selectedIconPath": "static/images/tabbar/wode_select.png"}]},"globalStyle": {"navigationBarTextStyle": "@navigationBarTextStyle","navigationBarTitleText": "uni-app","navigationBarBackgroundColor": "@navigationBarBackgroundColor","backgroundColor": "@backgroundColor"}
页面切换代码实现
mine.vue
<template><button type="text" class="change-theme" @click="changeTheme('dark')">切换暗黑模式</button><button type="text" class="change-theme" @click="changeTheme('light')">切换明亮模式</button>
<templaate>
<script setup>
// 切换用plus实现
function changeTheme(theme) {//暗黑模式// #ifdef APPconsole.log('✨file:mine.vue:52✨✨', uni.getSystemInfoSync());plus.nativeUI.setUIStyle(theme)// 此处监听也是监听的的app主题信息,不是手机系统的主题uni.onThemeChange(({ theme }) => {console.log('onThemeChange', theme)})// #endif
}
</script>
至此配置,手机上点击切换明亮和暗黑是没有问题的,都是正常切换;
但是没办法同步手机系统的设置。
同步手机暗黑配置
在 manifest.json -> plus 中配置:【注意:保存后,提交云端打包后生效】
- iOS平台:在 “plus” -> “distribute” -> “apple” 节点下添加 defaultTheme 节点
- Android平台:在 “plus” -> “distribute” -> “google” 节点下添加 defaultNightMode 节点
"app-plus" : {"darkmode" : true,"themeLocation" : "theme.json","safearea" : {// 安全区域看项目需要,设置"none"需要页面内自行适配"background" : "#ffffff","backgroundDark" : "#1F1F1F","bottom" : {"offset" : "auto" // "auto" | "none"}},"distribute" : {"apple" : {//"UIUserInterfaceStyle": "Automatic", //不推荐使用,设置light或dark后将无法跟随系统"defaultTheme" : "auto" // HBuilderX 3.6.10及以上版本支持 },"google" : {"defaultNightMode" : "auto" // "light" | "dark" | "auto"}}
},
进行上面配置后,打包自定义基座,然后运行到手机查看效果。
切换手机系统暗黑模式,app会自动同步设置。
注:
如果手动调用plus.nativeUI.setUIStyle()设置了’dark’或者’light’,则不会跟随系统;
再次调用plus.nativeUI.setUIStyle('auto'),及设置成自动后,可再次跟随系统变化。
额外适配
有些页面可能会出现无法适配的问题,因为自己写的样式,这是背景色白色了,需要自行进行适配
比如像下面这种样式,我用的uni-list组件,就需要再写样式进行适配。

适配样式,只做参考,根据实际情况进行修改
@media (prefers-color-scheme: dark) {.content {background-color: rgb(31, 31, 31);}::v-deep .uni-list {background-color: rgb(31, 31, 31);}::v-deep .uni-list-item {background-color: rgb(31, 31, 31) !important;}::v-deep .uni-list-item__content-title {color: #999999 !important;}
}
适配后的样式:

兼容:
iOS 13+、Android 10+设备上才支持
参考资料:
https://ask.dcloud.net.cn/article/36995
https://www.html5plus.org/doc/zh_cn/nativeui.html#plus.nativeUI.setUIStyle
https://uniapp.dcloud.net.cn/tutorial/darkmode.html#open-darkmode
相关文章:
uniapp适配暗黑模式配置plus.nativeUI.setUIStyle适配DarkMode配置
uniapp适配暗黑模式配置 目录 uniapp适配暗黑模式配置setUIStyleDarkMode 适配app-plus manifest.json配置theme.json配置pages.json配置页面切换代码实现同步手机暗黑配置额外适配 参考官方文档:https://uniapp.dcloud.net.cn/tutorial/darkmode.html 主要用到api…...
EXCEL 或 WPS 列下划线转驼峰
使用场景: 需要将下划线转驼峰,直接在excel或wps中第一行使用公式,然后快速刷整个列格式即可。全列工下划线转为格式,使用效果如下: 操作步骤: 第一步:在需要显示驼峰的一列,复制以…...
走进Linux的历史发展史
目录 前言 Linux的发展史 UNIX发展的历史 Linux发展历史 开源 企业应用现状 Linux在服务器领域的发展 桌面领域 移动嵌入式领域 云计算/大数据领域 发行版 编辑 Linux环境搭建方式 前言 本节博客内容较水,主要介绍Linux的发展历史和其相关的学习内容&a…...
学习yum工具,进行安装软件
目录 1.Linux 软件包管理器 yum 什么是软件包 2.Linux下安装软件的方案 3.Linux软件生态 Linux下载软件的过程(Ubuntu、Centos、other) 操作系统的好坏评估--- ⽣态问题 为什么会有⼈免费特定社区提供软件,还发布?还提供云服…...
union介绍及使用
union格式 在C中,union是一种特殊的数据类型,它允许在相同的内存位置存储不同的数据类型,但在任意时刻只能使用一个成员。以下是union类型的基本格式说明: union UnionName {memberType1 memberName1;memberType2 memberName2;m…...
安全,服务器证书和SSL连接
业务报错: javax.net.ssl.SSLPeerUnverifiedException: Certificate for <10.5.20.137> doesn’t match any of the subject alternative names: [*.dt.zte.com.cn] at org.apache.http.conn.ssl.SSLConnectionSocketFactory.verifyHostname(SSLConnectionSoc…...
Java结合ElasticSearch根据查询关键字,高亮显示全文数据。
由于es高亮显示机制的问题。当全文内容过多,且搜索中标又少时,就会出现高亮结果无法覆盖全文。因此需要根据需求手动替换。 1.根据es的ik分词器获取搜索词的分词结果。 es部分: //中文分词解析 post /_analyze {"analyzer":"…...
Design Compiler:Topographical Workshop Lab2
相关阅读 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 本文是对Synopsys Design Compiler Topographical/Graphical Workshop Lab Guide中Lab2的翻译,Lab文件可以从以下链接获取。 Synopsys Design Co…...
【C语言】连接陷阱探秘(1):声明与定义
目录 一、声明与定义的混淆 1.1. 声明(Declaration) 1.2. 定义(Definition) 1.3. 避免混淆的方法 1.4. 示例 二、声明与定义不匹配 2.1. 常见的不匹配情况 2.2. 解决方法 三、外部变量与静态变量的命名冲突 3.1. 外部变量命名冲突 3.2. 静态变量命名冲突 四、缺…...
ChatGPT学术专用版,一键润色纠错+中英互译+批量翻译PDF
ChatGPT academic项目是由中科院团队基于ChatGPT专属定制。论文润色、语法检查、中英互译、代码解释等可一键搞定,堪称科研神器。 功能介绍 我们以3.5版本为例,ChatGPT学术版总共分为五个区域:输入控制区、输出对话区、基础功能区、函数插件…...
python isinstance(True, int)
今天的bug 是布尔类型给的。 >>> a True >>> isinstance(a, int) True>>> a True >>> isinstance(a, bool) TruePython中的布尔类型(bool)实际上是整数类型(int)的一个子类,…...
1.5寸**进口 128128带灰阶oled屏 spi串口 老王电子diy 设备 OLED 2024/11/15 arduino
名:1.5寸**进口 128128带灰阶oled屏 协:spi串口 铺:老王电子diy 设备: OLED 时间:2024/11/15 IDE: arduino 兜兜转转还是打通了,他的接口 用的i2c 标志 夭寿咯 MOSI(Master Out Slave In):主机输出,从机输入。MISOÿ…...
【EasyExcel】复杂导出操作-自定义颜色样式等(版本3.1.x)
文章目录 前言一、自定义拦截器二、自定义操作1.自定义颜色2.合并单元格 三、复杂操作示例1.实体(使用了注解式样式):2.自定义拦截器3.代码4.最终效果 前言 本文简单介绍阿里的EasyExcel的复杂导出操作,包括自定义样式,根据数据合并单元格等。…...
机器学习 ---线性回归
目录 摘要: 一、简单线性回归与多元线性回归 1、简单线性回归 2、多元线性回归 3、残差 二、线性回归的正规方程解 1、线性回归训练流程 2、线性回归的正规方程解 (1)适用场景 (2)正规方程解的公式 三、衡量…...
深度学习每周学习总结J5(DenseNet-121 +SE 算法实战与解析 - 猴痘识别)
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 0. 总结 数据导入及处理部分:本次数据导入没有使用torchvision自带的数据集,需要将原始数据进行处理包括数据导入…...
VBA学习笔记:点击单元格显示指定的列
应用场景: 表格中列数较多,特定条件下隐藏一些无关的列,只保留相关的列,使表格更加清晰。 示例:原表格如下 点击一年级,只显示一年级相关的科目: 点击二年级,只显示二年级相关的科…...
windows C#-LINQ概述
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。 此外,需要针对每种类型的数据源了解不同的查询语言:SQL 数据库、XML 文档、各种 Web 服…...
vue项目npm run serve出现【- Network: unavailable】(从排查到放弃)
1. 问题现象 环境: 系统:win11node:v16.20.2“vue”: “2.6.10” 执行npm run serve启动vue项目,期望: App running at:- Local: http://localhost:9528/ - Network: http://x.x.x.x:9528/实际: App runn…...
R语言贝叶斯分析:INLA 、MCMC混合模型、生存分析肿瘤临床试验、间歇泉喷发时间数据应用|附数据代码...
全文链接:https://tecdat.cn/?p38273 多模态数据在统计学中并不罕见,常出现在观测数据来自两个或多个潜在群体或总体的情况。混合模型常用于分析这类数据,它利用不同的组件来对数据中的不同群体或总体进行建模。本质上,混合模型是…...
C++ 关于类与对象(中篇)一篇详解!(运算符重载)
赋值运算符重载 运算符重载 C 为了 增强代码的可读性 引入了运算符重载 , 运算符重载是具有特殊函数名的函数 ,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。 函数名字为:关键…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
