我想创建一个仅位于托盘中的撰写桌面应用程序,但不在 Windows 任务栏/macOS Dock 中显示应用程序图标。
我从教程开始没有窗口的托盘应用程序。
fun main() = application {
Tray(
icon = TrayIcon,
menu = {
Item(
"Exit",
onClick = ::exitApplication
)
}
)
}
object TrayIcon : Painter() {
override val intrinsicSize = Size(256f, 256f)
override fun DrawScope.onDraw() {
drawOval(Color(0xFFFFA500))
}
}
这成功地显示了托盘图标并且没有窗口,但它还在 Dock 中显示了一个无用的应用程序图标。如何更改代码以隐藏该任务栏图标?
编辑:我现在拥有一台Windows PC,但它没有显示图标。所以它在 mac 上不起作用。但我还是想隐藏它。但现在我认为这可能是一个错误,而不是它在 Dock 中显示的缺失/未记录的功能。
对于 macos,我们需要将 LSUIElement 键值对添加到 info.plist。
compose.desktop {
application {
mainClass = "MainKt"
nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
packageName = "com.XXXXXXX"
packageVersion = "1.0.0"
macOS {
bundleID = "com.XXXXXX.desktop"
infoPlist {
extraKeysRawXml = """
<key>LSUIElement</key>
<string>true</string>
""".trimIndent()
}
}
}
}
}
接下来你gradle packageDmg,可以本地转一圈来验证一下隐藏的效果。
对于win,我们只需要通过状态变量来控制窗口是否显示即可。
var showWindow by remember { mutableStateOf{ false } }
Tray(icon = image,
menu = {
Item("show or hide", onClick = {showWindow = !showWindow})
}
)
if (showWinodw) {
Window(onCloseRequest = ::exitApplication) {
App()
}
}