目前我正在开发一个应用程序,但是我不知道有任何方法可以检查系统是否已经处于黑暗模式。该应用程序是在Mac上使用JavaFX制作的。目前我有一个 CheckMenuItem,当检查时,使用 IF 语句加载“darkmode.css”文件。如果未选中 checkmenuitem 框,则删除该文件。
但是,我希望能够在操作系统处于黑暗模式且不需要再次删除它时激活 css 文件,而不是检查 MenuItem。我感觉Java可能做不到这一点。如果有任何方法可以做到这一点,我将热衷于学习并对您如何实现它感兴趣。
简而言之,几乎是原生黑暗模式。
是的,有多种方法可以实现这一目标。 Intellij Idea本身是用Java编写的,她从
2020.3
版本开始就有了操作系统主题同步功能。
您可以使用名为 jSystemThemeDetector
的
库。您可以在 Windows 10、MacOS 甚至某些 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
}
});
没有标准的 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。