小竹bamboo
小竹bamboo
  • 发布:2026-07-10 13:44
  • 更新:2026-10-31 16:58
  • 阅读:347

【报Bug】uni.showModal 安卓手机暗黑模式时弹窗变成黑色了但是内容还是黑色的就看不见了(当前项目没有做暗黑模式的功能)

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: MacBook Air M5

HBuilderX类型: 正式

HBuilderX版本号: 5.15

手机系统: Android

手机系统版本号: Android 16

手机厂商: 小米

手机机型: 小米15

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

App下载地址或H5⽹址: http://zibosie.cn:30703/obs/upload/20260709/fb00d354f3b9459dc57bc22530213592.apk

示例代码:

uni.showModal({
title: $t('profile.logout.title'),
content: $t('profile.logout.content'),
// 显式传入按钮文案,避免部分端未命中 uni 内置语言包时展示原始 i18n key。
cancelText: $t('common.cancel'),
confirmText: $t('common.confirm'),
confirmColor: themeStyles.value.primary,
success: (res) => {
if (!res.confirm) {
return
}

  userStore.logout()  
  uni.reLaunch({ url: '/pages/login/index' })  
}  

})

操作步骤:

点击退登录弹窗弹窗

预期结果:

弹窗为白色字的颜色为黑色,因为没有做暗黑模式的功能,不应该给我变黑

实际结果:

弹窗变黑 字体也是黑的 看不出来效果

bug描述:

2026-07-10 13:44 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

感谢您的反馈。针对您提交的 Bug,官方评审与分析如下:

1. Bug 反馈内容完整性分析

  • BUG 描述:描述较为清晰,明确指出了在安卓手机暗黑模式下,uni.showModal 弹窗背景变黑且文字也是黑色导致不可见的问题,同时说明了项目本身未做暗黑模式适配。
  • 代码示例:提供的代码片段包含国际化处理和业务逻辑跳转,并非可直接复现问题的最小化示例。建议后续反馈时,能提供一个仅包含 uni.showModal 基础调用的新工程示例,以便官方人员快速验证,避免业务依赖(如 $t、userStore)干扰排查。
  • 复现步骤:描述为“点击退登录弹窗弹窗”,结合代码示例可以理解触发场景,官方人员基本能够复现。
  • 预期结果与实际结果:预期结果合理(未做暗黑模式则应保持浅色),实际结果描述准确,符合系统原生弹窗在暗黑模式下的表现特征。
  • 分类信息:版本信息、运行平台、设备机型等内容填写完整,符合规范。

2. Bug 是否成立及原因分析

该现象并非 uni-app 框架层面的 Bug,而是 Android 原生系统机制导致的预期行为。

uni.showModal 在 App 端调用的是系统原生的弹出框。当手机系统开启了暗黑模式时,原生系统会自动将原生弹窗的背景渲染为深色。由于该 API 默认的文字颜色是黑色,且未提供修改背景颜色的参数,就会导致“黑底黑字”不可见的情况。相关历史反馈(如 DCloud问答_130831)也证实了这一点:开发者最初以为弹窗背景变黑是 Bug,后续发现是测试设备开启了系统深色模式所致。

3. 解决方案与建议

由于原生 showModal 的背景色由系统控制,如果您希望在不做全应用暗黑模式适配的前提下,保证弹窗始终为浅色显示,可以采取以下方案:

方案一:强制设置应用原生界面为浅色模式(推荐)
在 App 启动时(如 App.vue 的 onLaunch 中),通过 5+ API 强制将原生 UI 样式设置为浅色,这样原生弹窗就会保持白底黑字:

// #ifdef APP-PLUS  
plus.nativeUI.setUIStyle("light");  
// #endif

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
参考文档:plus.nativeUI.setUIStyle

方案二:使用自定义弹窗组件替代原生 Modal
如果您的应用未来有深度适配暗黑模式的需求,或者需要完全掌控弹窗的样式(背景色、字体色、圆角等),建议放弃使用 uni.showModal,转而使用前端自定义组件来实现弹窗效果。您可以前往 DCloud 插件市场搜索相关的自定义弹窗组件,例如:

方案三:适配暗黑模式
如果您希望顺应系统暗黑模式,可以参考官方的暗黑模式适配指南,为应用开启并适配深色主题。详情请参考:uni-app 暗黑模式

内容为 AI 生成,仅供参考
1***@163.com

1***@163.com

我也遇到这个问题,在小米手机上会有,其它手机暂时没发现,也加了// #ifdef APP-PLUS
plus.nativeUI.setUIStyle("light");
// #endif,但没效果

要回复问题请先登录或注册