【发布时间】:2021-03-28 07:59:56
【问题描述】:
我是 android 样式和主题的新手,我看过很多不同的帖子,但似乎无法解决我面临的问题。
我尝试过的所有解决方案似乎都与this one 几乎相同(通常不包括物理应用内开关),所以我可能只是在这里遗漏了一些东西!
基本上,我希望我正在开发的应用程序的背景能够根据手机默认暗模式设置的设置在浅色和深色之间切换。因此,如果手机处于深色模式,则在您打开应用时应用较深的颜色,如果处于浅色模式,则应用较浅的颜色。
明确地说,我说的是您在手机设置或向下滑动屏幕中设置的明暗模式,而不是应用内的开关。
我已将样式和主题的父项都切换为使用 dayNight。
速记
风格的名称目前是 LightTheme,这只是我尝试不同的东西来尝试让它发挥作用!
styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="LightTheme" parent="Theme.MaterialComponents.DayNight">
<item name="colorPrimary">@color/light_blue</item>
<item name="colorPrimaryDark">@color/dark_blue</item>
<item name="colorSecondary">@color/dark_purple</item>
<item name="colorSecondaryVariant">@color/light_purple</item>
<item name="colorAccent">@color/yellow</item>
<item name="colorButtonNormal">@color/orange</item>
</style>
</resources>
Themes.xml
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.Whereshouldieat" parent="Theme.MaterialComponents.DayNight">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
</resources>
我可以为整个应用或活动设置主题或样式,但我不希望较小的子元素的背景与应用的“背面”具有相同的颜色背景(例如,我不希望不希望 recyclerview 项目与应用程序的背景共享背景颜色,因为那样它们就不会像我需要它们那样突出)。我可以设置视图的样式,但它们不会随着手机的明暗模式而改变。
目前我的颜色会随着问题的错误解决方法而改变,这就是其中的这段代码 MainActvitiy.kt
when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) {
Configuration.UI_MODE_NIGHT_NO -> {
val backgroundColor = ContextCompat.getColor(this, R.color.light_blue)
findViewById<ConstraintLayout>(R.id.main_activity_layout).setBackgroundColor(backgroundColor)
}
Configuration.UI_MODE_NIGHT_YES -> {
val backgroundColor = ContextCompat.getColor(this, R.color.black)
findViewById<ConstraintLayout>(R.id.main_activity_layout).setBackgroundColor(backgroundColor)
}
}
我可以做的是让应用程序使用我所描述的白天或夜间模式在白色和黑色背景之间切换。是否像更改这些“模式”的默认颜色一样简单?如果是这样,我只需要知道该怎么做!
感谢您的帮助,谢谢!
【问题讨论】:
标签: android android-layout kotlin