标签: compose-desktop

如何在 Jetpack Compose 中以便携式方式实现计时器?

我想编写一些应用程序,让一些事情按计划进行。

每隔几分钟轮询一次 URL 进行更新似乎是一个相当常见的用例。不过,在这种特殊情况下,我只是想实现一个时钟。

这有效:

@Composable
fun App() {
    var ticks by remember { mutableStateOf(0) }

    // Not 100% happy about this unused variable either
    val timer = remember {
        Timer().apply {
            val task = object : TimerTask() {
                override fun run() {
                    ticks++
                }
            }
            scheduleAtFixedRate(task, 1000L, 1000L)
        }
    }

    MaterialTheme {
        Text(
            // A real application would format this number properly,
            // but that's a different question
            text = "$ticks"
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

但我必须导入java.util.Timer,所以它不会是可移植的。

Jetpack Compose …

timer kotlin android-jetpack-compose compose-desktop compose-multiplatform

18
推荐指数
2
解决办法
2万
查看次数

如何在桌面应用程序的jetpack compose中使用webview

我正在使用桌面撰写编写桌面应用程序。但无法找到任何关于如何使用 web-view 的建议,就像我们应该使用的 android 中一样。

对于桌面应用程序,我们无法使用 android web-view 任何帮助和建议将不胜感激。

android-jetpack-compose jetbrains-compose compose-desktop

13
推荐指数
1
解决办法
5203
查看次数

12
推荐指数
3
解决办法
9397
查看次数

如何在 Jetpack Compose for Desktop 中使用 .svg 文件?

我正在尝试使用.svg(矢量文件)来显示图像,但我被卡住了,无法做到这一点。有什么办法可以使用它,我尝试像这样使用它

Image(imageFromResource("svg_file_name.svg"),contentDescription="")
Run Code Online (Sandbox Code Playgroud)

但它会抛出一个错误:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Failed to Image::makeFromEncoded
    at org.jetbrains.skija.Image.makeFromEncoded(Image.java:130)
    at androidx.compose.ui.graphics.DesktopImageAsset_desktopKt.imageFromResource(DesktopImageAsset.desktop.kt:77)
    at ComposableSingletons$MainKt$lambda-1$1.invoke(main.kt:103)
    at ComposableSingletons$MainKt$lambda-1$1.invoke(main.kt:98)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.material.SurfaceKt$Surface$6.invoke(Surface.kt:267)
    at androidx.compose.material.SurfaceKt$Surface$6.invoke(Surface.kt:254)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)
    at androidx.compose.material.SurfaceKt.Surface-F-jzlyU(Surface.kt:251)
    at androidx.compose.material.SurfaceKt.Surface-F-jzlyU(Surface.kt:110)
    at androidx.compose.material.CardKt.Card-F-jzlyU(Card.kt:66)
    at MainKt.ShowCanvasIsEmpty(main.kt:93)
    at MainKt.DisplayMainUI(main.kt:78)
    at MainKt$main$1$1.invoke(main.kt:60)
    at MainKt$main$1$1.invoke(main.kt:55)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)
    at androidx.compose.material.TextKt.ProvideTextStyle(Text.kt:252)
    at androidx.compose.material.MaterialThemeKt$MaterialTheme$1.invoke(MaterialTheme.kt:81)
    at androidx.compose.material.MaterialThemeKt$MaterialTheme$1.invoke(MaterialTheme.kt:80)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215)
    at androidx.compose.material.MaterialThemeKt.MaterialTheme(MaterialTheme.kt:72)
    at MainKt$main$1.invoke(main.kt:55)
    at MainKt$main$1.invoke(main.kt:53)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
    at androidx.compose.desktop.AppWindow_desktopKt$Window$1$1.invoke(AppWindow.desktop.kt:97)
    at …
Run Code Online (Sandbox Code Playgroud)

kotlin android-jetpack-compose compose-desktop

12
推荐指数
1
解决办法
1万
查看次数

如何在 Jetpack Compose Desktop 中加载字体?

在 Android 版 Jetpack Compose 中,您可以执行以下操作:


val fontFamily = FontFamily(
    Font(
        resId = R.font.my_font_400_regular,
        weight = FontWeight.W400,
        style = FontStyle.Normal
    ),
    Font(
        resId = R.font.my_font_400_italic,
        weight = FontWeight.W400,
        style = FontStyle.Italic
    )
)


Run Code Online (Sandbox Code Playgroud)

但对于桌面版,文件结构不同,我无法访问,R.font.my_font_400_regular因为“R”是 Android 资源功能。

kotlin android-jetpack-compose-text compose-desktop

11
推荐指数
2
解决办法
4468
查看次数

桌面托盘可组合件的样式撰写

我一直在尝试 Compose for Desktop,并且试图弄清楚 Jetbrain 如何设计Tray可组合项的样式。我假设这就是他们用来构建 Jetbrains Toolbox 的方法,因为他们写了一篇关于如何将 Toolbox 迁移到 Compose for Desktop 的文章(请参阅此处)

默认托盘 Jetbrains 工具箱托盘
在此输入图像描述 在此输入图像描述

图像来自 Ubuntu 22;我还没有测试过 Windows 或 Mac。

system-tray tray compose-desktop compose-multiplatform

10
推荐指数
1
解决办法
581
查看次数

如何在 Kotlin Compose 桌面中从远程 url 加载图像?

如何在 Kotlin Compose 桌面中从远程 url 加载图像?

在Android中它使用大肠杆菌作为官方样本

@Composable
fun NetworkImage(
    url: String,
    modifier: Modifier = Modifier,
    contentScale: ContentScale = ContentScale.Crop,
    placeholderColor: Color? = MaterialTheme.colors.compositedOnSurface(0.2f)
) {
    CoilImage(
        data = url,
        modifier = modifier,
        contentScale = contentScale,
        loading = {
            if (placeholderColor != null) {
                Spacer(
                    modifier = Modifier
                        .fillMaxSize()
                        .background(placeholderColor)
                )
            }
        }
    )
}
Run Code Online (Sandbox Code Playgroud)

bu 作为桌面应用程序,不支持 aar。

android-jetpack-compose compose-desktop

8
推荐指数
1
解决办法
5592
查看次数

如何防止 Jetpack Compose 中不必要的重组

我有一个TextField用于搜索查询和一个Button将执行搜索的查询,结果显示在列中。由于搜索需要几秒钟才能运行,我希望它在按下按钮时执行,而不是在文本更改时执行。

这是一个简化的演示:

Column {
    val list = remember { mutableStateListOf<String>() }
    val textFieldValue = remember { mutableStateOf(TextFieldValue("")) }

    TextField(
        value = textFieldValue.value,
        onValueChange = { textFieldValue.value = it }
    )

    Button({
        list.clear()
        list.addAll(textFieldValue.value.text.split(""))
    }) {
        Text("Search")
    }

    list.forEach {
        println("test")
        Text(it)
    }
}
Run Code Online (Sandbox Code Playgroud)

第一次按下按钮后,foreach 循环将在文本更改时运行。即使单击TextField也会重新运行循环。这不会在文本更改时运行搜索,而是重新呈现结果,这会导致在文本字段中输入时出现故障。

如何防止这种情况发生?

kotlin android-jetpack-compose compose-desktop

8
推荐指数
1
解决办法
1万
查看次数

如何在 Compose Desktop 中以编程方式获取应用程序版本?

我知道可以在build.gradle\xe2\x86\x92中设置版本nativeDistributions.packageVersion ...
\n但是如何在应用程序的源代码中读取该版本,例如在application可组合项中打印它?

\n

在 macOS 上,打开可分发应用程序时会出现“关于”屏幕,它显示我们通过以下方式设置的版本build.gradle:\n在此输入图像描述

\n

compose-desktop

8
推荐指数
1
解决办法
1042
查看次数

使用 Compose for Desktop 在浏览器中打开链接

单击按钮时如何在浏览器中打开链接。我正在使用Compose for Desktop

Button(onClick = {
    // What I have to write here..
}) {
    Text(
        text = "Open a link",
        color = Color.Black
    )
}
Run Code Online (Sandbox Code Playgroud)

提前致谢。

kotlin compose-desktop

7
推荐指数
2
解决办法
2466
查看次数