标签: jetbrains-compose

撰写:带有键的 Remember() 与 derivativeStateOf()

这两种方法有什么区别?

  1. val result = remember(key1, key2) { computeIt(key1, key2) }文档
  2. val result by remember { derivedStateOf { computeIt(key1, key2) } }文档

key1如果和 都没有key2改变,则两者都避免重新计算。如果导出下游状态,第二个也可以避免重新计算,但除此之外,它们的行为是相同的,不是吗?

kotlin android-jetpack-compose jetbrains-compose

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

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

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

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

android-jetpack-compose jetbrains-compose compose-desktop

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

Kotlin 多平台(Android、桌面)中的 GRPC

我正在创建一个 Jetbrains Compose 多平台项目。但我只需要 Desktop (JVM) 和 Android,所以有两个 JVM 目标。我想分解出需要 grpc 的逻辑,这样 Android 和 Desktop 都可以使用它,而无需我对其进行两次编程。

我似乎无法找到将 grpc/proto 绑定到项目中的方法,以便我可以编写一次逻辑并在 android 和桌面之间共享它。这是我的公共项目的 build.gradle.kts 的样子:

plugins {
    id("com.android.library")
    kotlin("multiplatform")
    id("org.jetbrains.compose")

}

kotlin {
    android()
    jvm("desktop")

    sourceSets {
        named("commonMain") {
            dependencies {
                api(compose.runtime)
                api(compose.foundation)
                api(compose.material)
                api(compose.ui)
                implementation(compose.preview)
                implementation(compose.uiTooling)
            }
        }
    }
}

android {
    compileSdk = 31

    defaultConfig {
        minSdk = 21
        targetSdk = 31
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }

    sourceSets {
        named("main") {
            manifest.srcFile("src/androidMain/AndroidManifest.xml")
            res.srcDirs("src/androidMain/res")
        }
    } …
Run Code Online (Sandbox Code Playgroud)

android grpc kotlin-multiplatform android-jetpack-compose jetbrains-compose

9
推荐指数
0
解决办法
519
查看次数

有没有办法使用 GraalVM 从 Jetpack Compose 桌面应用程序创建本机二进制文件?

我想从我的 Compose 桌面应用程序创建一个小型二进制文件。以下是 Compose 的开箱即用选项:

  1. 使用java运行时创建本机包(很棒,但大小很大)
  2. 创建一个 Uber(fat)Jar(但它需要 Java 11 才能运行,因为 Compose 库不支持旧版本)

我相信可以使用 GraalVM 将 Uber Jar 转换为本机二进制文件。我还尝试运行 native-image 命令,但它创建了一个 exe,该 exe 又运行 Jar,这又回到了同样的问题;计算机上必须安装 Java 11。我缺少什么?

windows graalvm graalvm-native-image jetbrains-compose

7
推荐指数
1
解决办法
1589
查看次数

如何在单击 Compose Multiplatform 中的其他位置时清除 BasicTextField 的焦点?

我有一个BasicTextFieldJetbrains Compose Multiplatform 桌面版。当我单击它时,文本字段获得焦点并变得可编辑。但是,当我单击应用程序中的其他位置时,焦点不会丢失,并且该字段仍然可以编辑,就像我刚刚单击它一样。

我知道这种行为是正常的并且是故意的。尽管如此,我希望当用户单击其他地方时 TextField 变得不聚焦,无论它是可单击的还是不可单击的可组合项。

我该如何实现这一目标?

kotlin android-jetpack-compose jetbrains-compose compose-multiplatform

7
推荐指数
1
解决办法
3447
查看次数

确定特定系统托盘图标的位置(x,y)

问题

我正在使用 Jetbrains Compose 开发桌面应用程序,但我也愿意接受使用 Swing(它在幕后使用)的解决方案。我想实现一个功能,其中应用程序窗口最初位于系统托盘图标上,类似于 JetBrains Toolbox 的行为方式(我想将一个(未修饰的)窗口放置在靠近托盘图标的位置)。

例子

截图示例 在此输入图像描述

我尝试使用鼠标事件来检测托盘图标上的点击并相应地定位窗口,但该方法无法实现所需的行为。它确实有效,但窗口有时会跳跃(取决于我单击的位置,并且解决方案总体看起来很奇怪)。

在此输入图像描述

我之前的解决方案

我发布我的解决方案,以防有人需要它:

internal object XTray {

    fun initialize(image: Image, onClick: (x: Int, y: Int) -> Unit) {
        createTrayIcon(image, onClick)
    }

    private fun createTrayIcon(
        image: Image,
        onClick: (x: Int, y: Int) -> Unit,
    ): TrayIcon {
        val systemTray = SystemTray.getSystemTray()

        val trayIcon = TrayIcon(image, "Open X")

        trayIcon.popupMenu = PopupMenu("X")

        trayIcon.addMouseListener(createTrayMouseListener { x, y ->
            onClick(x, y)
        })

        systemTray.add(trayIcon)

        return trayIcon
    }

    private fun createTrayMouseListener(
        onClick: (x: Int, y: Int) -> …
Run Code Online (Sandbox Code Playgroud)

java desktop swing kotlin jetbrains-compose

5
推荐指数
1
解决办法
228
查看次数

如何在 Jetpack Compose 中使透明颜色后面的区域不可交互/不可点击?

考虑一下这个充当“对话框”的可组合项是在根应用程序前面绘制的:

显示可组合项的屏幕截图

我尝试通过使其适合整个屏幕并使其根容器具有基本background(Color.Gray.copy(alpha = 0.5f)修饰符来模拟此对话框。

然而,即使在前面,仍然可以与顶部按钮进行交互。

我的问题是,是否有一种“直接”方式来“禁用”特定可组合树的交互,以避免将参数(例如“可点击”)传递给所有受影响的可组合项?

我想做这样的事情:

  • 从 alpha 颜色后面的区域截取“屏幕截图”;
  • 将屏幕截图绘制为图像;
  • 然后绘制前面的可组合项(在我的示例中为“对话框”)。

然而,我不知道实施这个有多大价值,甚至不知道如何获取“屏幕截图”。

另外,可能是使用相关的东西来处理这个问题的方法remember compostion state等等。

android kotlin android-jetpack-compose jetbrains-compose

3
推荐指数
1
解决办法
1769
查看次数