如何隐藏 Jetpack Compose Desktop 中的 Dock 图标?

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

我想创建一个仅位于托盘中的撰写桌面应用程序,但不在 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 中显示的缺失/未记录的功能。

kotlin user-interface taskbar dock compose-desktop
1个回答
0
投票

对于 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()
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.