You need to enable JavaScript to run this app. Android Studio开发的Android应用禁用夜间模式操作无效怎么办
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio开发的Android应用禁用夜间模式操作无效怎么办

禁用Android应用夜间模式的有效方案

之前尝试删除values-night目录下的themes.xml、或是将日间主题内容挪入night目录没有生效,核心原因是当前使用的Theme.AppCompat.DayNight.NoActionBar主题本身内置了自动跟随系统深色模式切换的逻辑:

  • 哪怕删掉所有自定义的values-night资源文件,框架依然会在系统开启深色模式时,自动套用内置的深色配色触发模式切换
  • 将日间主题内容挪入values-night目录的操作,反而会导致日间模式下丢失对应的主题资源引用,和禁用夜间模式的目标完全相悖

下面是经过验证的可行解决路径:

方法一:替换主题父类,从根源切断夜间模式适配

直接修改themes.xml中AppTheme的继承父类,去掉所有带DayNight标识的父类配置,换成固定模式的主题:

  • 如果需要应用全程保持固定浅色风格,把原有主题代码替换为:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
  • 如果需要应用全程保持固定深色风格,直接选用对应不带DayNight标识的深色父类即可,这类主题本身就没有响应系统深色开关的逻辑。
  • 额外注意:如果项目集成了Material Components库,需要同步检查主题父类配置,把带DayNight的Material主题(比如Theme.MaterialComponents.DayNight.NoActionBar)替换为对应非DayNight的版本,避免组件库自带的夜间适配逻辑绕过主主题的配置。

方法二:代码层强制锁定模式状态

如果因为历史兼容问题暂时不方便替换主题父类,可以在Application的onCreate方法中添加全局强制配置,从运行时层面堵死夜间模式的切换入口:

  • Kotlin 项目写法:
override fun onCreate() {
    super.onCreate()
    // 全局强制应用始终使用浅色模式,完全不响应系统深色模式开关
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
}
  • Java 项目写法:
@Override
public void onCreate() {
    super.onCreate();
    // 全局强制应用始终使用浅色模式
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
}

这个配置的优先级高于所有资源层面的配置,哪怕保留了DayNight的主题父类,也能完全阻止应用随系统切换到夜间模式。

内容的提问来源于stack exchange,提问作者Isaac Qadri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.13 07:54:02