当前位置: 首页 > 知识库问答 >
问题:

是否有一个API来检测操作系统正在使用的主题--黑暗或光明(或其他)?

巴洲
2023-03-14

在最近的Android版本中,自Android8.1以来,操作系统得到了越来越多的主题支持。更具体地说是黑暗主题。

尽管从用户的角度对黑暗模式有很多讨论,但几乎没有为开发人员编写的内容。

从Android8.1开始,谷歌提供了某种黑暗主题。如果用户选择有一个深色的壁纸,OS的一些UI组件会变成黑色(本文在此)。

现在在Android Q上,它似乎走得更远,但具体到什么程度还不清楚。不知何故,一个名为“Smart launcher”的启动器已经在它上面运行,提供了在它自己上使用主题(这里的文章)。因此,如果您启用黑暗模式(手动,如这里所写),您将得到应用程序的设置屏幕:

到目前为止,我发现的唯一的东西是上面的文章,我正在关注这类主题。

我也知道如何使用实时壁纸请求操作系统改变颜色,但这似乎在Android Q上发生了变化,至少根据我在尝试时看到的情况(我认为这更多的是基于一天中的时间,但不确定)。

是否有一个很好的API应用程序来处理所选择的主题?意思是,如果操作系统是特定的主题,那么当前的应用程序也是如此?

共有1个答案

何华灿
2023-03-14

谷歌刚刚在2019年I/O结束时发布了关于黑暗主题的文档,这里。

为了管理dark主题,您必须首先使用最新版本的Material Components Library:“com.google.android.Material:Material:1.1.0-alpha06”

根据系统主题更改应用程序主题

要让应用程序根据系统切换到暗主题,只需要一个主题。为此,主题必须有theme.MaterialComponents.DayNight作为父级。

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
    ...
</style>

确定当前系统主题

若要了解系统当前是否处于黑暗主题,可以实现以下代码:

switch (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) {
    case Configuration.UI_MODE_NIGHT_YES:
        …
        break;
    case Configuration.UI_MODE_NIGHT_NO:
        …
        break; 
}

结果

 类似资料:
  • 我需要知道用户是否在操作系统级别启用了黑暗主题,这样我就可以自动在我的应用程序中启用黑暗主题。(不强制黑暗模式)

  • 我会尽量详细解释“请帮忙。我打开了一个新项目。在新项目中,“主题”部分打开了两次“一亮一暗”。我在应用程序中添加了黑色文字。文字看起来是白色的,因为我的手机是黑色主题。这很好,但令人费解。我只有一种颜色。xml文件(不适用于夜间版本)文本是如何变为白色的?这很好,但我添加的图标(矢量“xml”)并将其设置为灰色,但现在它无法理解。图标的颜色在黑暗中从灰色变为黑色。我想让他换成白人。我还打开了颜色。

  • 问题内容: 我需要检测Java中的操作系统名称和版本。我可以做到的 但是问题在于这是不可靠的。有时它返回错误的信息,并且我无法检测到所有操作系统,除了最流行的Windows,MacOS,Linux等,在64位操作系统的情况下,甚至会提供错误的信息。我需要检测具有任何规格的任何操作系统。我无法为此找到合适的解决方案。 也许我可以用JavaScript做到这一点?如果在Java中是不可能的,请告诉我如

  • 我在Windows8.1上为C/C++开发人员提供了Eclipse IDE。我从市场上安装了Darkest Dark主题,但它不起作用。在重新启动时,Eclipse以我以前的主题开始,而Darkest Dark甚至不会出现在Preferences窗口中。然而,当我再次打开Marketplace并搜索它时,它显示为已安装。我找了找,但没有找到这个确切问题的答案。有人帮忙吗?

  • 如何更改MySQL Workbench设置,使其使用深色主题?

  • 在我们基于GCC的C嵌入式系统中,我们使用和选项来允许链接器在链接最终可执行文件时删除未使用的(未引用的)部分。多年来这一直很有效。 在同一系统中,大多数数据结构和缓冲区都是静态分配的(通常是文件作用域的-变量)。 当然,我们有bug,有时是很糟糕的bug,我们希望快速排除缓冲区溢出的可能性。 我们的一个想法是在每个bss节和data节之间放置金丝雀--每个bss节只表示一个符号(因为)。就像编译