有没有办法在Java中检测Mac OS或Windows OS是否处于深色模式

问题描述 投票:0回答:2

目前我正在开发一个应用程序,但是我不知道有任何方法可以检查系统是否已经处于黑暗模式。该应用程序是在Mac上使用JavaFX制作的。目前我有一个 CheckMenuItem,当检查时,使用 IF 语句加载“darkmode.css”文件。如果未选中 checkmenuitem 框,则删除该文件。

但是,我希望能够在操作系统处于黑暗模式且不需要再次删除它时激活 css 文件,而不是检查 MenuItem。我感觉Java可能做不到这一点。如果有任何方法可以做到这一点,我将热衷于学习并对您如何实现它感兴趣。

简而言之,几乎是原生黑暗模式。

java javafx
2个回答
13
投票

是的,有多种方法可以实现这一目标。 Intellij Idea本身是用Java编写的,她从

2020.3
版本开始就有了操作系统主题同步功能。

您可以使用名为 jSystemThemeDetector

。您可以在 Windows 10MacOS 甚至某些 Linux 发行版上检测深色模式。

简单检测示例:

final OsThemeDetector detector = OsThemeDetector.getDetector();
final boolean isDarkThemeUsed = detector.isDark();
if (isDarkThemeUsed) {
    //The OS uses a dark theme
} else {
    //The OS uses a light theme
}

同步示例:

final OsThemeDetector detector = OsThemeDetector.getDetector();
detector.registerListener(isDark -> {
    if (isDark) {
        //The OS switched to a dark theme
    } else {
        //The OS switched to a light theme
    }
});

7
投票

没有标准的 Java API 来确定主机的本机 UI 是否处于“深色模式”或“夜间模式”。

在UI设计方面,“深色模式”是一个相对较新的想法。据我所知,这个想法直到 2018 年才真正开始兴起;请参阅https://en.wikipedia.org/wiki/Light-on-dark_color_scheme。这是在 Swing 和 JavaFX 都稳定下来之后很久。 (就 Swing 而言,是几十年后的事了!)

OpenJDK Bug 跟踪器中有一个最近(2019 年 12 月)的 RFE,用于检测主机操作系统的暗模式设置:JDK-8235460

在缺乏标准 Java API 的情况下,您可以尝试特定于操作系统的想法;例如如下所述:

对于Android,支持深色/夜间模式检测:


更新在我写完这个问题的原始答案后,有人将浅色/深色模式检测器Java库上传到Github;有关详细信息,请参阅https://stackoverflow.com/a/65805346/139985

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.