【问题标题】:Is it possible to set the night mode only for a single Activity是否可以仅为单个活动设置夜间模式
【发布时间】:2021-02-11 06:17:31
【问题描述】:

我在活动的 onCreate 中设置夜间模式。因此,应用程序中的每一个活动都会变成夜间模式,并且之前的所有活动都会重新创建。但我只需要那个特定的活动处于夜间模式,而所有其他活动都处于灯光模式。如何做到这一点?下面的代码行我在活动的 oncreate 中使用以设置为夜间模式。

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)

【问题讨论】:

  • 为什么不在其他所有活动中关闭它?
  • @a_local_nobody 你的意思是在所有其他活动中设置 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) ?
  • 是的,我认为没有其他方法可以做到这一点,您可以考虑制作一个基类或其他东西来简化此操作
  • 以与当前设置相反的模式调用setDefaultNightMode 会使堆栈上的所有Activities 重新创建,这非常低效并且可能导致丢失一些数据(例如滚动位置或EditTexts 中的文本,取决于关于保存实例状态实现)

标签: android android-layout


【解决方案1】:

遗憾的是,您无法选择仅将一个 Activity 切换到黑暗模式,而让所有其他 Activity 处于亮光状态。 setDefaultNightMode 是一种也是唯一的方法,它适用于整个 Application 和所有在其中运行的 Activities

您必须为这个Activity 制作两个单独的样式/主题,并以编程方式切换其主题 (here you find out how),或者如果这个Activity 始终是深色的,则直接在清单中设置其主题

【讨论】:

    【解决方案2】:

    您可以在清单文件中更改活动的主题

    【讨论】:

      【解决方案3】:

      尝试此设置仅针对单个活动的模式


      灯光模式

      getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);
      

      黑暗模式

      getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);
      

      系统默认

      getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多