0

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

第一次启动应用程序时,我可以很容易地找出这个设置是如何使用这个线程中指定的东西的

然而,在使用以下主题强制主题之后,这些似乎没用:

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)

更改主题后,我无法再获取系统设置,因为它总是返回“darkmode on”,除非我再次强制它为 light 主题,但在这里它会再次返回“darkmode off”!:(

任何想法,如何获得系统设置?

提前致谢,
FF

4

3 回答 3

1

根据 Kakyire 的回答,我弄清楚了问题所在。
I was assuming there was only two options to be passed to AppCompatDelegate.setDefaultNightMode , MODE_NIGHT_YES and MODE_NIGHT_NO but the thing is, I needed to pass MODE_NIGHT_FOLLOW_SYSTEM when "use system" is selected.
我希望这可能对具有相同“困难”的人有所帮助
快乐编码,
FF

于 2021-04-02T01:07:13.650 回答
1

更改主题后,我无法再获取系统设置,因为它总是返回“darkmode on”,除非我再次强制它为 light 主题,但在这里它会再次返回“darkmode off”!:( 任何想法,如何获得系统设置?

在其他Theme动态更改您需要使用SharedPreferencesPreference用于 PreferenceScreen。这个Github 项目可以帮助你如何实现Dark Theme

于 2021-04-01T01:43:10.887 回答
0

要检测“系统”是否处于暗模式,您可以使用UiModeManager类的getNightMode()方法。

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

像这样,

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
}

如果想知道“您的应用程序”是否处于夜间模式:

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

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

        case Configuration.UI_MODE_NIGHT_UNDEFINED:
            // We don't know what mode we're in, assume notnight
            break;
    }
于 2021-09-26T09:36:50.183 回答