使用 AppCompatDelegate 更改深色主题后无法检测深色主题是否处于活动状态

2024-04-24

我正在尝试实现一个选项,让用户指定是否希望应用程序根据系统设置(深色或浅色,即设备是否设置为使用深色模式)加载主题,但我也提供覆盖系统设置的可能性。

第一次启动应用程序时,我可以使用类似此中指定的内容轻松找出此设置thread https://stackoverflow.com/questions/44170028/android-how-to-detect-if-night-mode-is-on-when-using-appcompatdelegate-mode-ni/66879004

然而,在强制主题后,这些似乎毫无用处:

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)

更改主题后,我无法再获取系统设置,因为它总是返回“暗模式打开”,除非我再次强制它亮起主题,但这里它总是返回“暗模式关闭”! :(

知道如何获取系统设置吗?

提前致谢,
FF


检测是否“system" 无论是否处于深色模式,您都可以使用获取夜间模式()的方法用户界面模式管理器 class.

https://developer.android.com/reference/android/app/UiModeManager#getNightMode() https://developer.android.com/reference/android/app/UiModeManager#getNightMode()

Like so,

UiModeManager uiModeManager = (UiModeManager) context.getSystemService(Context.UI_MODE_SERVICE);
int mode = uiModeManager.getNightMode();
if (mode == UiModeManager.MODE_NIGHT_YES) {
    // System is in Night mode
} else if (mode == UiModeManager.MODE_NIGHT_NO) {
    // System is in Day mode
}

如果想知道是否“your app" 是否处于夜间模式:

int mode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
    switch (mode) {
        case Configuration.UI_MODE_NIGHT_NO:
            // App is in Day mode
            break;

        case Configuration.UI_MODE_NIGHT_YES:
            // App is in Night mode
            break;

        case Configuration.UI_MODE_NIGHT_UNDEFINED:
            // We don't know what mode we're in, assume notnight
            break;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 AppCompatDelegate 更改深色主题后无法检测深色主题是否处于活动状态 的相关文章

随机推荐