该项目是基于 Google 的 Jetpack Compose ,Jetpack Compose 一个用于在 Android 的 UI开发工具包,Compose for Desktop 可以让在 Android上使用 Jetpack Compose 的能力直接转移到 Compose for Desktop ,反之亦然。
由 Compose for Desktop 提供的所有核心 API 都与移动端的相同,包括修饰符、UI元素或布局单元等待。实际上 Compose for Desktop 的核心是与 Jetpack Compose 合作开发的,以确这两种技术可以一起发展,这也使得在桌面和 Android 之间 UI 实现共享成为可能。
Compose for Desktop 的入门很简单,设置项目依赖关系后,开发者就可以简单的使用几行代码来表达一个简单的有状态用户界面,并且有现成的 Material Design 元素库可以帮助快速创建 UI。
import androidx.compose.desktop.Window import androidx.compose.foundation.Text import androidx.compose.material.* import androidx.compose.runtime.* fun main() = Window(title = "Compose for Desktop") { var count by remember { mutableStateOf(0) } MaterialTheme { Button(onClick = { count++ }) { Text(if (count == 0) "Hello World" else "Clicked $count!") } } } ![image.png](https://img-blog.csdnimg.cn/img_convert/5206ff41719eb833529ca96a8320662e.webp?x-oss-process=image/format,png) 但是 **Compose for Desktop** 不仅仅是UI元素,它基本上拥有的功能都可以在 Android 对应版本中找到。 # 桌面特定的API 为了让开发者的应用能够集成其他的桌面 UI,**Compose for Desktop** 附带了桌面特有的API,这些 API 主要是用于特定的桌面功能,它们的结构与其他 Compose API 一样,可让开发者的应用程序对鼠标指针等事件做出反应,查询和操做应用的窗口大小和位置,创建任务栏图标或菜单栏条目等。
fun main() { Window { var windowSize by remember { mutableStateOf(IntSize.Zero) } var windowLocation by remember { mutableStateOf(IntOffset.Zero) } AppWindowAmbient.current?.apply { events.onResize = { windowSize = it } events.onRelocate = { windowLocation = it } } Text(text = "Location: ${windowLocation}\nSize: ${windowSize}") } } ![image](https://img-blog.csdnimg.cn/img_convert/4d124924d2966da45ba4d31252524449.webp?x-oss-process=image/format,png) > Google 希望这些 Desktop API 能尽快涵盖所有相关功能,为此这里需要了解目前版本中最缺少哪些集成,因此 Google 可以优先考虑这些接口的更新,欢迎反馈到:https://blog.jetbrains.com/cross-post/jetpack-compose-for-desktop-milestone-1-released/ # 快速迁移集成 就像 Kotlin 本身一样,**Compose for Desktop** 也遵循简单操作性和平稳迁移的理念,这样 **Compose for Desktop** 可以与 Swing 和 AWT集成在一起,这样开发者的 **Compose for Desktop** 应用程序就可以解锁这些 Java 的图形API,该集成还允许开发者逐渐将使用这些框架的应用程序迁移到 **Compose for Desktop** 。
fun main() = Window(title = "JFrame properties") { var alwaysOnTop by remember { mutableStateOf(false) } onCommit(alwaysOnTop) { val jFrame = AppManager.focusedWindow?.window jFrame?.let { **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。** **深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!** **因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。** ![img](https://img-blog.csdnimg.cn/img_convert/7eb6a823456adc59445537c559bf484f.png) ![img](https://img-blog.csdnimg.cn/img_convert/b1d2408fae759e13a61eeebfc65df217.png) ![img](https://img-blog.csdnimg.cn/img_convert/796aa37c51f1924f0c7f7feb2bdfc6ef.png) ![img](https://img-blog.csdnimg.cn/13f2cb2e05a14868a3f0fd6ac81d625c.png) ![img](https://img-blog.csdnimg.cn/img_convert/0a722be6b7f09864cc400d6a09eb9c9f.png) ![img](https://img-blog.csdnimg.cn/img_convert/b60f933112a7e7952d3831695bf0bcac.png) **既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!** ![img](https://img-blog.csdnimg.cn/img_convert/929f03f480da84a517fcf3c91848774e.png) ![img](https://img-blog.csdnimg.cn/img_convert/cea86ba7f7a94ffc1978ef866cd7a624.jpeg) **由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新** **如果你觉得这些内容对你有帮助,可以添加V:vip204888 备注Android获取(资料价值较高,非无偿)** ![img](https://img-blog.csdnimg.cn/img_convert/699e260d434fa4c60b2cc263e4be9d29.png) ### 重要知识点 下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。 ![ ](https://img-blog.csdnimg.cn/img_convert/e58b765d72493e2feee41ab8543d6740.webp?x-oss-process=image/format,png) **高级进阶篇——高级UI,自定义View(部分展示)** UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧! ![](https://img-blog.csdnimg.cn/img_convert/19e8aa8dccf9ae3c973fc4afc7707df8.webp?x-oss-process=image/format,png) * **面试题部分合集** ![](https://img-blog.csdnimg.cn/img_convert/5a571d9b6bd8364f9ce42663e7b399fb.webp?x-oss-process=image/format,png) mg-uCxm7Ja0-1711570348156)] * **面试题部分合集** [外链图片转存中...(img-YmukHz0J-1711570348156)] > **本文已被[CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》]( )收录**