为桌面编写Jetpack:在后台运行应用程序? [英] Jetpack compose for desktop: run application in background?
本文介绍了为桌面编写Jetpack:在后台运行应用程序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我对喷气背包作曲还是个新手。我对那个话题做了很多研究,但我找不到任何有用的东西。我想要实现的是,如果我关闭我的窗口,我的应用程序将留在后台,并且可以从托盘中再次打开。我设法创建了托盘,但当我关闭应用程序窗口时,它会关闭整个应用程序。我如何才能做到这一点?
此应用程序将仅在Windows和MacOS上运行。我现在不关心Android
推荐答案
编辑:适用于版本0.4.0
我设法弄明白了。主函数应该是应用程序,而不是窗口
@OptIn(ExperimentalComposeUiApi::class)
fun main() = application {
}
如果应用程序同时包含窗口和托盘,则它将继续在后台运行,并且在窗口关闭后不会关闭。
@OptIn(ExperimentalComposeUiApi::class)
fun main() = application {
Tray(
icon = BufferedImage(24, 24, 1),
menu = {
Item(
"Exit",
onClick = { exitProcess(1) }
)
}
)
Window{
Text("Hello World")
}
}
编辑:适用于版本1.0.0-Beta5
现在您必须在Window对象上指定onCloseRequest,如果您将其保留为空,它将不会关闭窗口。 在应用程序中,创建一个变量来指示窗口是否打开。 像以前一样创建托盘。托盘图标现在需要Painter对象,而不是BufferedImage。 而不是简单地检查窗口打开状态是否为真,显示窗口,否则什么都不做。@OptIn(ExperimentalComposeUiApi::class)
fun main() = application {
val isOpen = remember { mutableStateOf(true)}
Tray(
icon = TrayIcon,
menu = {
Item(
"Exit",
onClick = { exitApplication() }
)
}
)
if(isOpen.value){
Window(
onCloseRequest = { isOpen.value = false }
) {
MaterialTheme {
Text("Hello World")
}
}
}
}
object TrayIcon : Painter() {
override val intrinsicSize = Size(256f, 256f)
override fun DrawScope.onDraw() {
drawOval(Color(0xFFFFA500))
}
}
这篇关于为桌面编写Jetpack:在后台运行应用程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文