在 main activity 中使用 setTheme 时,setDefaultNightMode 不起作用
setDefaultNightMode not working when using setTheme in main activity
我有一个应用程序,我在我的主(且仅)activity 中强制使用“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 分配给 Manifestactivity 中的主要
android:name=".MainDrawerActivity"
android:theme="@style/SplashTheme"...
最后在 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)
启动画面有效,但问题是启动画面完成后,主题更改为深色模式。即使 phone 不处于黑暗模式。
我试过这样调用它,但它也不起作用,同样的行为:
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) 的工作方式不同?
非常感谢任何指导。
这应该可以,但我不知道为什么。我认为这是问题所在
默认 material 设计主题。如果您转到您的主题文件并更改
<style name="Theme.ContactForm" parent="Theme.MaterialComponents.Light.DarkActionBar">
至
<style name="Theme.ContactForm" parent="Theme.AppCompat.Light.DarkActionBar">
这应该可以让我知道这是否可以解决问题。
最后我意识到我在 setTheme() 方法中为 activity 设置了错误的主题。但即使那样,我也不确定为什么它会显示黑暗主题。我现在甚至无法重现这个问题。现在就可以了。
我有一个应用程序,我在我的主(且仅)activity 中强制使用“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 分配给 Manifestactivity 中的主要
android:name=".MainDrawerActivity" android:theme="@style/SplashTheme"...
最后在 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)
启动画面有效,但问题是启动画面完成后,主题更改为深色模式。即使 phone 不处于黑暗模式。
我试过这样调用它,但它也不起作用,同样的行为:
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) 的工作方式不同?
非常感谢任何指导。
这应该可以,但我不知道为什么。我认为这是问题所在 默认 material 设计主题。如果您转到您的主题文件并更改
<style name="Theme.ContactForm" parent="Theme.MaterialComponents.Light.DarkActionBar">
至
<style name="Theme.ContactForm" parent="Theme.AppCompat.Light.DarkActionBar">
这应该可以让我知道这是否可以解决问题。
最后我意识到我在 setTheme() 方法中为 activity 设置了错误的主题。但即使那样,我也不确定为什么它会显示黑暗主题。我现在甚至无法重现这个问题。现在就可以了。