【问题标题】:setDefaultNightMode not working when using setTheme in main activity在主要活动中使用 setTheme 时 setDefaultNightMode 不起作用
【发布时间】:2021-09-10 17:12:44
【问题描述】:

我有一个应用程序,我在我的主要(也是唯一的)活动中强制“MODE_NIGHT_NO”,我在 super.onCreate() 之后立即执行此操作。

AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO)

现在我在this guide 之后添加一个启动画面,基本上是:

  • 为启动画面创建一个可绘制对象

  • 在 values\themes.xml 中创建一个名为 SplashScreen 的样式,其父 AppTheme(AppTheme 的父级是 Theme.MaterialComponents.DayNight.NoActionBar)

    <style name="SplashTheme" parent="AppTheme">
        <item name="android:windowBackground">@drawable/splash_screen</item>
    </style>
    
    
  • 将 SplashTheme 分配给 Manifest 中的主要活动

            android:name=".MainDrawerActivity"
            android:theme="@style/SplashTheme"...
    
  • 最后在 main Activity 中调用 setTheme,在 super.onCreate() 之前为整个应用设置正确的 AppTheme

    override fun onCreate(savedInstanceState: Bundle?) {
        setTheme(R.style.AppTheme)
        super.onCreate(savedInstanceState)
        AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO)
        setContentView(R.layout.activity_main_drawer)
    
    

启动画面可以工作,但问题是启动画面结束后,主题变为暗模式。即使手机未处于暗模式。

我试过这样称呼它,但它也不起作用,同样的行为:

override fun onCreate(savedInstanceState: Bundle?) {
    AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO)
    setTheme(R.style.AppTheme)
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main_drawer)

我什至尝试删除 values-night\themes.xml 看看会发生什么,但结果相同。 (我已经恢复了所说的文件夹)

为什么添加 setTheme(AppTheme) 时 setDefaultNightMode(MODE_NIGHT_NO) 不能正常工作?

非常感谢任何指导。

【问题讨论】:

    标签: android themes splash-screen


    【解决方案1】:

    这应该可以,但我不知道为什么。我认为这是问题所在 默认材料设计主题。如果你去你的主题文件,只是改变

     <style name="Theme.ContactForm" parent="Theme.MaterialComponents.Light.DarkActionBar">
    

    到

      <style name="Theme.ContactForm" parent="Theme.AppCompat.Light.DarkActionBar">
    

    这应该可以让我知道这是否可以帮助。

    【讨论】:

    • 感谢您的帮助。实际上问题是我设置了错误的主题(在 setTheme() 中)=/ 但即便如此,我仍然不明白为什么当手机/模拟器不处于黑暗模式时它会设置黑暗主题,而我正在使用AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO),现在如果我尝试重新创建问题,它甚至不会再发生了!噗
    • 你欢迎我的朋友。有时候这种情况会发生。只是申请不要放弃,你会找到解决方案。
    【解决方案2】:

    最后我意识到我在 setTheme() 方法中为我的活动设置了错误的主题。但即便如此,我也不确定为什么它会显示黑暗主题。我现在什至无法重现这个问题。现在可以了。

    【讨论】:

      猜你喜欢
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多