📌  相关文章
📜  以编程方式实现 Android 深色主题 - Java (1)

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

以编程方式实现 Android 深色主题 - Java

在 Android 10(API 级别 29)中,全局深色主题已经成为了一个正式特性。它可以让应用程序向用户自动提供适合当前系统主题的明暗伸缩栏等 UI 元素,以及应用主题。

本文将介绍如何使用 Java 以编程方式实现 Android 深色主题。

实现深色主题

在你的应用程序的XML资源文件夹中的 styles.xml 文件定义主题:

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        ...
    </style>

    <!-- 创建一个新的主题,作为深色模式的扩展 -->
    <style name="AppTheme.Dark" parent="AppTheme">
        <item name="android:windowBackground">@color/black</item>
        <item name="android:textColor">@color/white</item>
        ...
    </style>
</resources>

在 AndroidManifest.xml 中指定应用程序的主题:

<application
    android:name=".ExampleApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    ...
</application>

接下来在你的 Application 类中,设置你的应用程序的主题:

public class ExampleApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        
        // 检查是否在深色模式下运行
        // 如果是,请将应用程序的主题切换为深色主题
        if (isDarkModeEnabled()) {
            setTheme(R.style.AppTheme_Dark);
        }
    }

    // 判断当前系统是否在深色模式下运行
    private boolean isDarkModeEnabled() {
        int currentNightMode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
        return currentNightMode == Configuration.UI_MODE_NIGHT_YES;
    }
}

现在你已经成功地为你的应用程序添加深色主题的支持了!

经验提示
  • 为了确保在深色模式下获得最佳体验,请检查你的应用程序的颜色、图标和文本是否在深色模式下都能正常显示。
  • 如果你的应用程序包含自定义 View,请确保使用深色主题的正确绘图。
  • 如果您的应用程序包含多个 Activity,请确保在每个 Activity 中设置正确的主题。