在深入详解 Jetpack Compose | 优化 UI 构建 中谷歌介绍了为什么要设计 Jetpack Compose 来完成原生 Android 的开发,如今 Jetpack Compose for Desktop 的诞生,也说明了 Google 对 Compose 开发的认可和投入。

2020年11月5日 Jetpack Compose for Desktop 终于发布了第一个里程碑版本,作为新一代的 Kotlin UI 框架,Jetpack Compose 可快速地构建高性能和美观的用户界面。

更轻松桌面 UI 开发

Compose for Desktop 提供了声明式响应式的方法,通过使用 Kotlin 来创建用户界面,它的 API 参考了其他现代框架(如 ReactFlutter )。从本质上讲 Compose for Desktop 允许开发者通过组合函数在代码中声明桌面 UI,并且它会自动响应应用的状态同步。

该项目是基于 Google 的 Jetpack ComposeJetpack 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!")}}
}

但是 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}")}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AHCMOvyk-1604643344020)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/77abd513487d4c29b68aa9535de50031~tplv-k3u1fbpfcp-watermark.image)]

Google 希望这些 Desktop API 能尽快涵盖所有相关功能,为此这里需要了解目前版本中最缺少哪些集成,因此 Google 可以优先考虑这些接口的更新,欢迎反馈到:https://blog.jetbrains.com/cross-post/jetpack-compose-for-desktop-milestone-1-released/

快速迁移集成

就像 Kotlin 本身一样,Compose for Desktop 也遵循简单操作性和平稳迁移的理念,这样 Compose for Desktop 可以与 SwingAWT集成在一起,这样开发者的 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?.windowjFrame?.let {// Use JFrame-specific methodsit.isAlwaysOnTop = alwaysOnTop}}MaterialTheme {Column {Button(onClick = { alwaysOnTop = !alwaysOnTop }) {Text("Toggle always on top")}}}
}

为了让开发更具备灵活性,Google 还公开了本机 Skia 图形库提供的 API 部分,该 API 支持Compose for Desktop 进行底层渲染,从而使开发者可以完全控制应用程序的渲染方式。

学习 Compose for Desktop

如果要尝试一下,推荐通过阅读阅读入门教程,该教程介绍了如何设置和运行由Compose for Desktop 所需的基本步骤,另外在这里也可以查看的其他教程,其中涵盖了一系列主题,例如:操作图像、处理鼠标事件以及发送桌面通知等等。

这些内容都可以在这里找到:https://jetbrains.com/lp/compose/?_ga=2.7908593.2107796495.1604632959-1270161530.1604632959

Android 开发人员门户是 Jetpack Compose 的主要学习材料的来源,该门户提供了很多有关核心API的概念的明,这些概念也随着 Compose for Desktop 一起提供,有关 Compose 的模型及其基本API的概述可以看Jetpack Compose Pathway,其中包括了文章,视频等内容主题。

如果想要了解更复杂的 Compose for Desktop 例子,可以查看 Google 的演示应用程序,Demo 还包括了如何使用 Kotlin Multiplatform 在桌面和Android之间共享用户界面的例子。

发行前注意事项

这是 Compose for Desktop 的第一个里程碑版本,这意味着开发者可能会遇到各种各样的问题,而在第一个稳定版本发布之前,Compose for Desktop 提供的某些API可能仍会更改,当然 Gogole 也在努力争取第一个稳定且可投入生产的版本。

提供反馈意见

里程碑版本是开发者提供反馈最重要的时间,因为它会促使 Google 能够在稳定版本发布之前解决关键问题或包含其他功能,如果在使用 Compose for Desktop 时遇到任何问题,或者发现桌面专用的 API 尚未涵盖的任何例子,请在项目的 issue 中告知:https://github.com/JetBrains/compose-jb/issues 。

如果还想与团队的成员交谈,Google 也邀请大家加入有关 Kotlin Slack 的讨论。在 #compose-desktop 中,就可以找到有关 Compose for Desktop 的讨论,在#compose 中,也可以讨论涉及 Android 上的 Compose 和 Jetpack Compose 的问题。

希望你会在使用 Compose for Desktop 建立用户界面时能够获得乐趣!

原本链接 :https://blog.jetbrains.com/cross-post/jetpack-compose-for-desktop-milestone-1-released/

Jetpack Compose for Desktop: 里程碑1发布相关推荐

  1. Jetpack Compose学习笔记

    在前不久的 Android Dev Summit '19 上,Jetpack Compose 终于发布了一个可直接获得的预览版.现在的版本还是 0.1.0-dev02,处于非常早期的版本,官方也再三强 ...

  2. 在 Jetpack Compose 中安全地使用数据流

    /   今日科技快讯   / 11月17日下午,暴雪中国官方微博发布公告称,各位暴雪游戏的国服玩家,我们很遗憾地通知大家,随着我们与网之易公司现有授权协议的到期,自2023年1月24日0点起,所有&l ...

  3. 使用Jetpack Compose竟能做出如此漂亮的倒计时APP

    Compose开发者挑战赛二周目 迎合Jetpack Compose beta版的发布,Google官方发起了Compose开发者挑战赛活动,目前已经入二周目 android-dev-challeng ...

  4. (转)Android Jetpack Compose 最全上手指南

    在今年的Google/IO大会上,亮相了一个全新的 Android 原生 UI 开发框架-Jetpack Compose, 与苹果的SwiftIUI一样,Jetpack Compose是一个声明式的U ...

  5. 原创_Android Jetpack Compose 最全上手指南,互联网寒冬公司倒闭后

    声明式 UI 框架近年来飞速发展,并且被 Web 开发带向高潮.React 更是为声明式 UI 奠定了坚实基础并一直引领其未来的发展.随后 Flutter 的发布也将声明式 UI 的思想成功带到移动端 ...

  6. 原创|Android Jetpack Compose 最全上手指南

    在今年的Google/IO大会上,亮相了一个全新的 Android 原生 UI 开发框架-Jetpack Compose, 与苹果的SwiftIUI一样,Jetpack Compose是一个声明式的U ...

  7. Android Jetpack Compose 最全上手指南 | 开发者说·DTalk

    本文原作者: 码农西哥,原文发布于微信公众号: Android 技术杂货铺  https://mp.weixin.qq.com/s/7tKv_RamfW0rG8tZHXH_rg 在 2019 年的 G ...

  8. 初识 Jetpack Compose

    Jetpack Compose 是一个用于构建原生 Android UI 的现代工具包.Jetpack Compose 用更少的代码.强大的工具和直观的 Kotlin API 简化并加速了 Andro ...

  9. Android 开发新技术:Jetpack Compose当仁不让

    前言 Jetpack Compose是用于构建原生Android 界面的新款工具包. 平时我们开发Android界面都是靠XML画出来,但是Compose 则是用代码来写界面,和Flutter写法有点 ...

最新文章

  1. 需求用例分析之八:用例颗粒度
  2. java 方块_哈工大java实验 移动小方块
  3. Redis分布式锁原理解析
  4. PgSQL · 最佳实践 · CPU满问题处理
  5. cross component navigation in HCP
  6. Processing 字体变形
  7. ps如何修改图片大小尺寸_PS新手入门教程:学习如何修改画布的大小
  8. 一篇总结得超全的前端进阶文章!入门、技巧、方法、书籍、网站...一步到位!
  9. HAPPY 2010
  10. BUAA_OO_第一次作业总结
  11. C++实现均值滤波器和中值滤波器
  12. 银行网站 ca服务器的安装,建行网银CA认证系统建设案例介绍
  13. 油田大数据与创新之路的探究
  14. Wei框架源码解读(1)
  15. 剑指offe——61序列化二叉树(Python)
  16. 2所非211院校挺进全球高校600强,甩开一众985 | 泰晤士世界大学排行榜出炉
  17. 抠图应用程序设计(一)——GrabCut算法的实现
  18. 含有js的英文单词_js-组成-dom-常见单词
  19. 【数据仓库学习】数据质量监控
  20. DICOM:再次剖析fo-dicom中DicomService的自定义事件绑定

热门文章

  1. [Spring Boot]Druid datasource整合及配置
  2. Vue3-watch
  3. python余弦定理求角_python余弦定理计算相似度
  4. office 365 excel 遇到问题 需要修复
  5. 遥控器页面html,打造大屏最好用的网页浏览器 遥控器也能当鼠标
  6. excel转换mysql建表_把 excel 和 mysq l数据库相互转换
  7. javascript 字符串中查找指定字符串
  8. python鸭子类型与协议理解
  9. H5怎么制作?快来看这个H5制作平台的案例你可能就明白了
  10. 大数据时代从繁乱冗杂中精准提取核心文本信息 × Python Tkinter 生成词云图