我想编写一些应用程序,让一些事情按计划进行。
每隔几分钟轮询一次 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
我一直在尝试 Compose for Desktop,并且试图弄清楚 Jetbrain 如何设计Tray可组合项的样式。我假设这就是他们用来构建 Jetbrains Toolbox 的方法,因为他们写了一篇关于如何将 Toolbox 迁移到 Compose for Desktop 的文章(请参阅此处)。
图像来自 Ubuntu 22;我还没有测试过 Windows 或 Mac。
我有一个BasicTextFieldJetbrains Compose Multiplatform 桌面版。当我单击它时,文本字段获得焦点并变得可编辑。但是,当我单击应用程序中的其他位置时,焦点不会丢失,并且该字段仍然可以编辑,就像我刚刚单击它一样。
我知道这种行为是正常的并且是故意的。尽管如此,我希望当用户单击其他地方时 TextField 变得不聚焦,无论它是可单击的还是不可单击的可组合项。
我该如何实现这一目标?
kotlin android-jetpack-compose jetbrains-compose compose-multiplatform
我正在使用 Jetpack Compose Multiplatform Desktop 做一个项目。我对 Gradle 不太熟悉,我想在我的项目中使用 Material 3。所以,我在文件中添加了这一行build.gradle.kts:
implementation("androidx.compose.material3:material3:1.0.0-alpha14")
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用以下命令将库导入 Kotlin 文件中时:
import androidx.compose.material3.*
Run Code Online (Sandbox Code Playgroud)
我有一个unresolved reference问题。
这是我的build.gradle.kts文件:
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
plugins {
kotlin("multiplatform")
id("org.jetbrains.compose")
}
group = "com.example"
version = "1.0-SNAPSHOT"
repositories {
google()
mavenCentral()
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
}
kotlin {
jvm {
compilations.all {
kotlinOptions {
jvmTarget = "18"
freeCompilerArgs = listOf("-opt-in=kotlin.RequiresOptIn")
}
}
withJava()
}
sourceSets {
val jvmMain by getting {
dependencies {
implementation(compose.desktop.currentOs)
implementation("androidx.compose.material3:material3:1.0.0-alpha14")
}
}
val jvmTest by getting
} …Run Code Online (Sandbox Code Playgroud) 知道如何处理图像上的可点击区域吗?如果在桌面模式下(是的,桌面模式现在可用;请参阅https://www.jetbrains.com/lp/compose)有类似的东西onMouseover,那么当鼠标悬停在视图上时视图会突出显示,那就太好了。
android android-jetpack-compose compose-desktop compose-multiplatform
我是一名 Android 开发人员,拥有使用 Jetpack Compose 的经验。现在,我正在尝试构建桌面应用程序,所以我找到了这个Compose for Desktop项目。我想JSON使用桌面应用程序存储一个文件,以便我可以从桌面应用程序读取该文件并将其显示给用户。不仅是 JSON 文件,我还想存储一些其他文件,例如 HTML。
在 Android 中,我可以使用raw或assets文件夹,但我不知道如何在 Compose for Desktop 中执行此操作。
如果有人能指出我正确的方向,我将不胜感激。
kotlin android-jetpack-compose compose-desktop compose-multiplatform
我正在学习 Jetbrains 的“Compose Multiplatform”,它基于 Jetpack Compose。
一些信息
因此,在构建下面的代码时,我收到错误:
fun Modifier.align(alignment: Alignment.Horizontal): Modifier' can't be called in this context by implicit receiver. Use the explicit one if necessary
此错误出现在这一行:
Icon(Icons.Filled.Close, "", Modifier.align(Alignment.CenterHorizontally))
Modifier我已经尝试添加完整的包androidx.compose.ui.Modifier.align(),但它仍然出现关于接收器的错误。如果它不在Row、Column或Box布局内,此错误就会消失。我没有尝试过其他很多人来看看他们是否也有问题。我相信这个框架仍然是 alpha,所以我只是想确保在 github 上发布问题之前我没有遗漏任何东西,因为我找不到其他人引用这个问题。
复制:
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.padding
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.Menu
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个使用 Compose Multiplatform 项目的项目,并寻找处理从 URL 加载图像的方法。但是,由于不支持 Coil,我还没有找到解决方案。
我遇到过一个转换位图的手动 Ktor 实现,但它缺乏缓存支持和其他实现细节(例如加载、错误状态)。
有没有人使用库集成图像加载或找到 Compose Multiplatform 的其他替代方案?
kotlin-multiplatform android-jetpack-compose compose-multiplatform
我正在尝试构建从 JetBrains 的存储库compose-multiplatform-ios-android-template克隆的项目。该代码在 Android 上运行良好,但在 iOS 上抛出错误。我也尝试过更新cocoapods。尽管如此,这还是会产生错误。现在,当我尝试在Android Studio上构建项目时,我的 logcat 上出现以下错误
java.lang.IllegalStateException: e: Could not find "../shared/build/kotlinTransformedMetadataLibraries/commonMain/org.jetbrains.kotlinx-atomicfu-0.17.3-nativeInterop-8G5yng.klib" in [/Users/rasel/Library/Application Support/kotlin/daemon]
at org.jetbrains.kotlin.library.SingleFileResolveKt$resolveSingleFileKlib$1.fatal(SingleFileResolve.kt:21)
at org.jetbrains.kotlin.library.KotlinLibrarySearchPathResolver.resolve(SearchPathResolver.kt:171)
at org.jetbrains.kotlin.library.KotlinLibrarySearchPathResolver.resolve(SearchPathResolver.kt:176)
at org.jetbrains.kotlin.library.CompilerSingleFileKlibResolveStrategy.resolve(SearchPathResolver.kt:298)
at org.jetbrains.kotlin.library.SingleFileResolveKt.resolveSingleFileKlib(SingleFileResolve.kt:24)
at org.jetbrains.kotlin.library.SingleFileResolveKt.resolveSingleFileKlib$default(SingleFileResolve.kt:15)
at org.jetbrains.kotlin.cli.metadata.KlibMetadataDependencyContainer.<init>(K2MetadataKlibSerializer.kt:117)
at org.jetbrains.kotlin.cli.metadata.K2MetadataKlibSerializer$serialize$analyzer$1.invoke(K2MetadataKlibSerializer.kt:49)
at org.jetbrains.kotlin.cli.metadata.K2MetadataKlibSerializer$serialize$analyzer$1.invoke(K2MetadataKlibSerializer.kt:43)
at org.jetbrains.kotlin.cli.metadata.CommonAnalysisKt.runCommonAnalysisForSerialization(CommonAnalysis.kt:42)
at org.jetbrains.kotlin.cli.metadata.K2MetadataKlibSerializer.serialize(K2MetadataKlibSerializer.kt:48)
at org.jetbrains.kotlin.cli.metadata.K2MetadataCompiler.doExecute(K2MetadataCompiler.kt:122)
at org.jetbrains.kotlin.cli.metadata.K2MetadataCompiler.doExecute(K2MetadataCompiler.kt:40)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:100)
at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:46)
at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1486)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown …Run Code Online (Sandbox Code Playgroud) JetBrains Compose for Desktop 中有没有办法更改标题栏背景颜色或仅将其更改为深色模式?我使用的是 MacOS,因此该栏可以是浅色或深色。也可以让标题栏本身不可见(但保留关闭、最小化和最大化按钮)并在其下方创建您自己的视图。
我正在查看撰写窗口代码,但在那里找不到它。
我开始学习kotlin,遇到了很多找不到的问题:kotlin multiplatform 和 compose multiplatform 有什么区别?他们可以在同一个项目中一起工作吗?什么是更初级的?
我从官方文档中了解到的是,kotlin multiplatform是一个在多种系统上进行开发的框架,而compose multiplatform是对android compose的改编
很简单;刚刚通过向导创建了一个 Compose Multiplatform 项目。
继续创建主题;但我想使用相同的字体,所以我poppins.ttf把commonMain/resources/font/.
然后我在模块中声明了以下内容commonMain:
expect val projectFontFamily: FontFamily
Run Code Online (Sandbox Code Playgroud)
在我使用的模块上commonDesktop:
actual val projectFontFamily: FontFamily = FontFamily(
Font("font/poppins.ttf")
)
Run Code Online (Sandbox Code Playgroud)
太棒了,成功了。从今起commonAndroid:
actual val projectFontFamily: FontFamily = FontFamily(
Font(R.font.poppins)
)
Run Code Online (Sandbox Code Playgroud)
由于某种原因,该类R未正确生成,我无法使用R.font.poppins.
如果我将“资源”重命名为“res”并将字体推入其中,res/font/那么它就可以工作。(但我只是复制了字体文件)。
我该如何解决这个问题?
kotlin android-resources kotlin-multiplatform android-jetpack-compose compose-multiplatform