Android - 使用 AppCompatDelegate.MODE_NIGHT_AUTO 时如何检测夜间模式是否打开

android

1个回答

写回答

mikefree7

2025-07-07 07:35

+ 关注

Android
Android

如何检测 Android 中使用 AppCompatDelegate.MODE_NIGHT_AUTO 是否开启夜间模式

Android 开发中,我们经常需要根据用户的偏好设置来调整应用程序的外观和主题。其中一种常见的需求是根据用户设备的夜间模式设置来自动切换应用程序的主题。Android 提供了一个方便的工具类 AppCompatDelegate,通过设置不同的模式,我们可以实现应用程序自动适应用户的夜间模式设置。本文将介绍如何检测 Android 中使用 AppCompatDelegate.MODE_NIGHT_AUTO 是否开启夜间模式,并提供一个案例代码帮助读者更好地理解。

检测夜间模式是否开启的方法

要检测 Android 中使用 AppCompatDelegate.MODE_NIGHT_AUTO 是否开启夜间模式,我们可以使用 AppCompatDelegate.getDefaultNightMode() 方法。该方法返回一个整数值,表示当前应用程序的夜间模式设置。具体的返回值如下:

- AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM:应用程序会跟随系统的夜间模式设置,如果系统开启夜间模式,则应用程序也会开启夜间模式。

- AppCompatDelegate.MODE_NIGHT_YES:应用程序始终开启夜间模式。

- AppCompatDelegate.MODE_NIGHT_NO:应用程序始终关闭夜间模式。

- AppCompatDelegate.MODE_NIGHT_AUTO:应用程序根据系统的夜间模式设置自动开启或关闭夜间模式。

在代码中,我们可以通过以下方式来检测夜间模式是否开启:

Java

int nightMode = AppCompatDelegate.getDefaultNightMode();

if (nightMode == AppCompatDelegate.MODE_NIGHT_AUTO) {

// 夜间模式开启

// 执行相应的操作

} else {

// 夜间模式关闭

// 执行相应的操作

}

夜间模式开启的示例代码

为了更好地理解如何检测夜间模式是否开启,我们提供一个简单的示例代码。假设我们有一个应用程序,根据夜间模式设置来改变背景颜色。

首先,在 res/values 文件夹下创建一个 themes.XML 文件,定义两个不同模式下的主题:

XML

<resources>

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

<!-- 日间模式 -->

<item name="Android:windowBackground">@color/day_background</item>

</style>

<style name="AppTheme.Dark" parent="Theme.AppCompat">

<!-- 夜间模式 -->

<item name="Android:windowBackground">@color/night_background</item>

</style>

</resources>

接下来,在 res/values-night 文件夹下创建一个 themes.XML 文件,定义夜间模式下的主题:

XML

<resources>

<style name="AppTheme" parent="Theme.AppCompat">

<!-- 夜间模式 -->

<item name="Android:windowBackground">@color/night_background</item>

</style>

</resources>

然后,在 MAInActivity.Java 文件中,根据夜间模式设置来切换主题:

Java

public class MAInActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

int nightMode = AppCompatDelegate.getDefaultNightMode();

if (nightMode == AppCompatDelegate.MODE_NIGHT_AUTO) {

// 夜间模式开启

setTheme(R.style.AppTheme.Dark);

} else {

// 夜间模式关闭

setTheme(R.style.AppTheme);

}

setcontentView(R.layout.activity_mAIn);

// 其他初始化操作

}

}

这样,当用户在系统设置中开启夜间模式时,应用程序会自动应用夜间模式的主题,背景颜色会改变为夜间模式下的颜色。

通过使用 AppCompatDelegate.getDefaultNightMode() 方法,我们可以轻松地检测 Android 中使用 AppCompatDelegate.MODE_NIGHT_AUTO 是否开启夜间模式。根据夜间模式的设置,我们可以相应地调整应用程序的主题和外观,提供更好的用户体验。例子中提供的代码可以帮助读者更好地理解如何实现夜间模式的检测和切换。读者可以根据自己的需求进行修改和扩展,以满足具体的应用场景。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号