我正在使用桌面撰写编写桌面应用程序。但无法找到任何关于如何使用 web-view 的建议,就像我们应该使用的 android 中一样。
对于桌面应用程序,我们无法使用 android web-view 任何帮助和建议将不胜感激。
我正在创建一个 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
我想从我的 Compose 桌面应用程序创建一个小型二进制文件。以下是 Compose 的开箱即用选项:
我相信可以使用 GraalVM 将 Uber Jar 转换为本机二进制文件。我还尝试运行 native-image 命令,但它创建了一个 exe,该 exe 又运行 Jar,这又回到了同样的问题;计算机上必须安装 Java 11。我缺少什么?
我有一个BasicTextFieldJetbrains Compose Multiplatform 桌面版。当我单击它时,文本字段获得焦点并变得可编辑。但是,当我单击应用程序中的其他位置时,焦点不会丢失,并且该字段仍然可以编辑,就像我刚刚单击它一样。
我知道这种行为是正常的并且是故意的。尽管如此,我希望当用户单击其他地方时 TextField 变得不聚焦,无论它是可单击的还是不可单击的可组合项。
我该如何实现这一目标?
kotlin android-jetpack-compose jetbrains-compose compose-multiplatform
我正在使用 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) 考虑一下这个充当“对话框”的可组合项是在根应用程序前面绘制的:
我尝试通过使其适合整个屏幕并使其根容器具有基本background(Color.Gray.copy(alpha = 0.5f)修饰符来模拟此对话框。
然而,即使在前面,仍然可以与顶部按钮进行交互。
我的问题是,是否有一种“直接”方式来“禁用”特定可组合树的交互,以避免将参数(例如“可点击”)传递给所有受影响的可组合项?
我想做这样的事情:
然而,我不知道实施这个有多大价值,甚至不知道如何获取“屏幕截图”。
另外,可能是使用相关的东西来处理这个问题的方法remember compostion state等等。