📌  相关文章
📜  android 以编程方式强制暗模式 (1)

📅  最后修改于: 2023-12-03 15:29:21.691000             🧑  作者: Mango

Android 以编程方式强制暗模式

自从 Android 10 推出深色主题(Dark Theme)之后,越来越多的应用开始支持暗模式。然而,并不是所有应用都自动适配深色主题,有时候我们需要手动切换。本文将介绍如何以编程方式强制暗模式,在代码中设置应用的主题为暗色。

在 AndroidManifest.xml 中设置主题

在 AndroidManifest.xml 文件中,可以为应用设置主题。我们可以在 <application> 标签内添加如下代码:

android:theme="@style/AppTheme.Dark"

@style/AppTheme.Dark 替换为你定义的暗色主题。

在 styles.xml 中定义主题

我们需要在 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 屏幕的电池消耗。