【问题标题】:Cant detect if dark theme is active or not after changing it with AppCompatDelegate使用 AppCompatDelegate 更改后,无法检测深色主题是否处于活动状态
【发布时间】:2021-04-01 00:26:41
【问题描述】:

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

在第一次启动应用程序时,我可以很容易地找出这个设置是如何使用的,就像 thread 中指定的那样

但是,在使用以下命令强制主题后,这些似乎无用:

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)

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

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

提前致谢,
FF

【问题讨论】:

    标签: android android-dark-theme android-darkmode


    【解决方案1】:

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

    如果要动态更改Theme,您需要使用SharedPreferencesPreference 作为PreferenceScreen。这个Github project可以帮助你如何实现Dark Theme

    【讨论】:

    • 谢谢 Kakyire,但我已经这样做了。问题是如果我想在应用程序中应用深色主题后指定使用系统设置。它只识别已经设置的主题
    • 根据您的代码,我发现我做错了什么。非常感谢!
    【解决方案2】:

    根据 Kakiire 的回答,我找出了问题所在。
    我假设只有两个选项可以传递给 AppCompatDelegate.setDefaultNightModeMODE_NIGHT_YESMODE_NIGHT_NO em>但是,我需要通过 mode_night_follow_system Em>时,选择“使用系统”。
    我希望这可能对具有相同“困难”的人有所帮助
    编码愉快,
    FF

    【讨论】:

      【解决方案3】:

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

      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;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-02
        • 2012-01-27
        • 1970-01-01
        • 2020-01-11
        • 2019-12-10
        相关资源
        最近更新 更多