var Color = plus.android.importClass("android.graphics.Color");
plus.android.importClass("android.view.Window");
var mainActivity = plus.android.runtimeMainActivity();
var window_android = mainActivity.getWindow();
window_android.setNavigationBarColor(Color.parseColor("#000000"));
"safearea" : {
"background" : "#000000",
"backgroundDark" : "#000000",
"bottom" : {
"offset" : "auto"
}
}, - 发布:2026-08-10 18:08
- 更新:2026-08-10 18:09
- 阅读:33
uni-app Android targetSdkVersion 36 后系统虚拟按键区域背景变白,setNavigationBarColor 与 safearea.background 无效
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: 11
HBuilderX类型: 正式
HBuilderX版本号: 5.23
手机系统: Android
手机系统版本号: Android 16
手机厂商: 小米
手机机型: Redmi Turbo 5
页面类型: vue
vue版本: vue2
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
Android 真机,云打包正式包,targetSdkVersion 设置为 36。
Android 真机,云打包正式包,targetSdkVersion 设置为 36。
预期结果:
targetSdkVersion 36 下,uni-app 应提供配置或基座适配能力,使 Android 系统导航栏区域可以保持设置的颜色或透明,或至少与 safearea.background 配置一致。
targetSdkVersion 36 下,uni-app 应提供配置或基座适配能力,使 Android 系统导航栏区域可以保持设置的颜色或透明,或至少与 safearea.background 配置一致。
实际结果:
targetSdkVersion 36 云打包后,底部系统导航栏区域仍为白色。
targetSdkVersion 36 云打包后,底部系统导航栏区域仍为白色。
bug描述:
同一项目在 targetSdkVersion 35 时,Android 底部系统导航栏区域可以正常显示为黑色。
升级 targetSdkVersion 到 36 后,底部系统导航栏区域变为白色。
已尝试:
- manifest.json 配置 app-plus.safearea.background 为 #000000
- manifest.json 配置 app-plus.safearea.bottom.offset 为 auto
- App.vue 中调用 window.setNavigationBarColor(Color.parseColor("#000000"))
- 尝试 setNavigationBarContrastEnforced(false)
- 全局 page 背景设置为 #000000
- 回退HBuilderX版本为5.15 底部为 #333333 的颜色 而 5.23 为#ffffff
Ask小助手 - Ask社区AI助手
欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
感谢您的反馈。针对您提交的关于 targetSdkVersion 升级到 36 后系统虚拟按键区域背景变白的问题,以下是基于 DCloud 官方视角的评审与分析:
1. Bug 反馈内容完整性评审
- BUG 描述:描述非常清晰,详细交代了 targetSdkVersion 从 35 升级至 36 后的现象,以及 HBuilderX 5.15 与 5.23 版本间的表现差异,并列举了已尝试的 5 种排查方案,有助于官方快速锁定问题范围。
- 代码示例:提供的代码片段包含了 NDK 调用原生
setNavigationBarColor的逻辑以及manifest.json中safearea的配置。不过,代码块存在轻微的 Markdown 格式嵌套问题,且缺少完整的manifest.json上下文结构,但核心配置已展示,不影响理解。 - 复现步骤:步骤明确(Android 真机、云打包正式包、targetSdkVersion 36),结合代码示例,官方人员可以据此进行复现验证。
- 预期结果与实际结果:预期结果合理,符合开发者对
safearea.background配置生效的合理诉求;实际结果客观反映了当前的兼容性异常,不属于误报。 - 分类信息:完整包含了 PC 环境、HBuilderX 版本、手机 OS(Android 16)、Vue 版本及机型(Redmi Turbo 5)等关键信息,分类准确。
2. Bug 是否成立及分析依据
经核对知识库与官方资料,此 Bug 现象成立。这主要是由于 Android 系统在高版本(特别是适配 targetSdkVersion 35/36 及 Android 15/16)中对系统导航栏(虚拟按键区域)的渲染策略发生了改变,导致 uni-app 旧的前端配置方案未能完全覆盖系统底层的默认行为。
- 关于 safearea 配置:根据官方文档,
manifest.json中的app-plus.safearea.background确实用于配置安全区域外的背景颜色。但针对 Android 平台,系统导航栏区域的颜色控制受系统版本影响较大。 - 替代与解决方案:根据官方知识库说明,为了解决应用启动时底部闪白的问题,目前推荐在
manifest.json的"app-plus" -> "distribute" -> "splashscreen"节点下配置androidNavigationBarColor来设置系统导航栏颜色。您可以尝试使用此配置项来覆盖系统默认的白色背景。
配置示例路径:
"app-plus" : {
"distribute" : {
"splashscreen" : {
"androidNavigationBarColor" : "#000000"
}
}
}
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
补充说明:
由于您使用的是 uni-app(Vue2 / JS 引擎版),在处理 Android 高版本系统导航栏颜色时,原生渲染策略的变更可能会导致 safearea.background 在某些机型上失效。如果您未来有条件迁移,目前官方推荐使用 uni-app x(基于 UTS 与 uvue 原生渲染引擎的新一代框架),它在 pages.json 中提供了更完善的系统虚拟导航栏控制属性(如 androidThreeButtonNavigationStyle 和 androidThreeButtonNavigationTranslucent),能更精准地适配 Android 的高版本特性。
建议您先尝试在云打包配置中添加 androidNavigationBarColor 属性并重新打包验证。如果问题依然存在,可能需要等待 HBuilderX 后续版本针对 targetSdkVersion 36 的底层适配更新。