📅  最后修改于: 2023-12-03 15:29:21.691000             🧑  作者: Mango
自从 Android 10 推出深色主题(Dark Theme)之后,越来越多的应用开始支持暗模式。然而,并不是所有应用都自动适配深色主题,有时候我们需要手动切换。本文将介绍如何以编程方式强制暗模式,在代码中设置应用的主题为暗色。
在 AndroidManifest.xml 文件中,可以为应用设置主题。我们可以在 <application>
标签内添加如下代码:
android:theme="@style/AppTheme.Dark"
将 @style/AppTheme.Dark
替换为你定义的暗色主题。
我们需要在 styles.xml 文件中定义需要使用的主题。可以按照如下方式为应用创建暗色主题:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- 主色调 -->
<item name="colorPrimary">@color/colorPrimary</item>
<!-- 突出色 -->
<item name="colorAccent">@color/colorAccent</item>
<!-- 文字颜色 -->
<item name="android:textColor">@color/colorTextPrimary</item>
<!-- 背景颜色 -->
<item name="android:windowBackground">@color/colorBackground</item>
</style>
<!-- 暗色主题 -->
<style name="AppTheme.Dark" parent="AppTheme">
<!-- 将颜色替换为适合暗色主题的颜色 -->
<item name="colorPrimary">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccentDark</item>
<item name="android:textColor">@color/colorTextPrimaryDark</item>
<item name="android:windowBackground">@color/colorBackgroundDark</item>
</style>
为了在应用中动态地切换主题,我们可以使用 AppCompatDelegate.setDefaultNightMode()
方法。可以在 onCreate()
方法中调用该方法以设置默认的主题,也可以在用户更改主题时调用该方法。
// 切换回暗模式
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
// 切换回日间模式
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
// 自动切换模式(跟随系统设置)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
通过在 AndroidManifest.xml 文件中定义主题,在 styles.xml 文件中定义暗色主题,以及使用 setDefaultNightMode()
方法在应用中切换主题,我们可以以编程方式强制暗模式。这可以提供更好的用户体验,并且可以稍微减少 OLED 屏幕的电池消耗。