什么是Jetpack Compose?带你走进Jetpack Compose~

Posted tt8889

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是Jetpack Compose?带你走进Jetpack Compose~相关的知识,希望对你有一定的参考价值。

上图是使用Jetpack Compose 开发UI时,在android Studio 上的预览,你可以看到,在左边编码时,右边你能同时展现UI即时预览,比如在明/暗模式下的状态切换,都能在右边及时展示出来。

它与我们现在使用的Android Studio 中的 text/Design 相似,但是它更加先进,使用很简单,这个功能只能在Android Studio4.0以上预览版,开发compose 时使 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 用。

3.3 直观的Kotlin API

对于开发者而言,Jetpack Compose 的用途不仅仅是Android UI,因此用Kotlin来编写他们并开源。当然,所有Android代码都是开源的,但特别强调的是Compose代码,它每天在这里更新([android.googlesource.com/platform/fr…](() )。因此,您可以查看和使用代码,同时也可以在此处提供反馈。

由于Compose仍在开发之中,因此每个开发人员的反馈都很重要.

[](()四 、API 设计


十多年来,Android团队在创建API和审查API方面拥有丰富的经验,但有一个收获-他们使用Java作为编程语言。但有一个问题-他们使用的是Java作为开发语言。

Jetpack Compose是第一个使用Kotlin正在开发中的大型项目,因此Android团队正在探索Kotlin API指南的新世界,以创建一组特定于Compose API的指南,该工作仍在进行中,仍然有很长的路要走。

[](()五、Compose API 的原则


5.1 一切都是函数

正如我前面的文章所说,Compose是一个声明式UI系统,其中,我们用一组函数来声明UI,并且一个Compose函数可以嵌套另一个Compose函数,并以树的结构来构造所需要的UI。

在Compose中,我们称该树为UI 图,当UI需要改变的时候会刷新此UI图,比如Compose函数中有 if 语句,那么Kotlin编译器就需要注意了。

5.2 顶层函数(Top-level function)

在Compose的世界中,没有类的概念,全都是函数,并且都是顶层函数,因此不会有任何继承和层次机构问题。

@Composable

fun checkbox ( … )

@Composable

fun TextView ( … )

@Composable

fun Edittext ( … )

@Composable

fun Image ( … )

在此过程中,Compose函数始终根据接收到的输入生成相同的UI,因此,放弃类结构不会有任何害处。从类结构构建UI过渡到顶层函数构建UI对开发者和Android 团队都是一个巨大的转变,顶层函数还在讨论之中,还没有发布release 版。

5.3 组合优于继承

Jetpack Compose首选组合而不是继承。 Compose会基于其他部分构建UI,但不会继承行为。

如果你经常关注Android或者对Android有所了解,你就会知道,Android中的几乎所有组件都继承于View类(直接或间接继承)。比如 EidtText 继承于 TextView ,而同时 TextView 又继承于其他一些View,这样的继承机构最终会指向跟View即 View.java 。并且 View.java 又非常多的功能。

而Compose团队则将整个系统从继承转移到了顶层函数。 Textview , EditText , 复选框 和所有UI组件都是它们自己的Compose函数,而它们构成了要创建UI的其他函数,代替了从另一个类继承。

5.4 信任单一来源

信任单一来源 是构建整个Jetpack Compose 一项非常重要的特性 。如果您习惯了现有的UI工具包,那么您可能会知道执行点击的工作原理。如下代码所示:

@Override

public boolean performClick()

setChecked(!mChecked);

final boolean handled = super.performClick();

首先,它改变view的状态,然后执行动作,这会导致许多bug,例如复选框,因为它首先从 已选中状态 变为 未选 中 ,反之亦然,然后由于某种原因,如果操作失败,开发人员必须手动分配先前的状态。

而在Compose中呢,功能正好相反。在此,复选框等功能具有两个参数。一个是在UI中显示状态,另一个是lambda函数,用于观察UI应相应更改的状态变化。

@Composable

fun Checkbox(checked : Boolean,

onCheckedChange : ((Boolean) -> Unit)),

…)

[](()六、深入了解Compose


如上图所示,Compose在运行时分为四个部分。让我们一一看一下。

6.1 Core

顾名思义,这是Compose的核心,如果您不想深入学习,可以跳过它。

基本上,核心包含四个构建模块:

  • 绘制(Draw)

  • 布局(Layout)

  • 输入(Input)

  • 语义(Semantics)

1、Draw — Draw 给了你访问Canvas的能力,因此你可以绘制你要的任何自定义View

2、Layout — 通过布局,我们可以测量事物并相应地放置视图。

以上是关于什么是Jetpack Compose?带你走进Jetpack Compose~的主要内容,如果未能解决你的问题,请参考以下文章

带你了解 Jetpack Compose 快照系统

谷歌大佬强势分享《Jetpack Compose 权威指南》,带你参透声明式UI的终极奥义!

《Jetpack Compose 从入门到实战》带你踏上 Compose 开发之旅~

谷歌开发者社区推荐:《Jetpack Compose 从入门到实战》新书上架,带你踏上 Compose 开发之旅~

JetPack Compose 基础(3)Compose 中的主题

这个 kotlin jetpack compose 代码示例中的“提供”语法是啥?