我正在使用Theme.Material.Components.DayNight主题在我的应用中实现暗模式。 问题是我的黑暗模式将纯粹与黑暗成分混合在一起,而我的“亮”模式将与黑暗与明亮成分混合在一起。因此,当应用程序默认模式设置为浅色时,我需要以某种方式访问深色主题属性。你能帮我解决我的问题吗?
我当时正在考虑设置自定义主题“ DarkThemeInLight”,并将其分配给应该为暗的视图,但这是一个好方法吗?如果我直接在该主题定义中设置颜色,则将重复使用colors.xml中几乎一半的代码(晚上)。
我正在考虑的方法:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorSecondary">@color/colorSecondary</item>
<item name="android:colorBackground">@color/colorBackground</item>
<item name="colorSurface">@color/colorSurface</item>
<item name="colorError">@color/colorOnError</item>
<item name="colorOnPrimary">@color/colorOnPrimary</item>
<item name="colorOnSecondary">@color/colorOnSecondary</item>
<item name="colorOnBackground">@color/colorOnBackground</item>
<item name="colorOnSurface">@color/colorOnSurface</item>
<item name="colorOnError">@color/colorOnError</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="drawerArrowStyle">@style/DrawerIcon</item>
<item name="textAppearanceSubtitle1">@style/TextAppearance.MyTheme.Subtitle1</item>
<item name="textAppearanceSubtitle2">@style/TextAppearance.MyTheme.Subtitle2</item>
<item name="textAppearanceCaption">@style/TextAppearance.MyTheme.Caption</item>
<item name="android:colorControlActivated">@color/colorPrimary</item>
</style>
<style name="DarkThemeInLight" parent="AppTheme">
<item name="android:colorBackground">@night/colorsBackground</item> (Can i call night folder somehow?)
or
<item name="android:colorBackground">#121212</item> (Value from night colors folder)
...
</style>
答案 0 :(得分:6)
我认为要解决此问题,您需要执行以下步骤:
values-night
中创建main/res/
目录。colors.xml
复制main/res/values/
文件并粘贴到values-night
内。main/res/values-night/colors.xml
中的颜色值更改为深色。(不要更改名称,只需更改值)onCreate
方法,并使用以下代码更改主题:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
AppCompatDelegate.MODE_NIGHT_YES
用于黑暗模式,AppCompatDelegate.MODE_NIGHT_NO
用于白天模式。