Jetpack compose入门

简介:什么是Jetpack compose

jetpack compose是谷歌新一代开发框架,采用kotlin为基础语言,在ui设计方面,摈弃了传统的用xml来描述界面的方式,而采用代码来描述,这被称为声明式UI

学习路线:给有Java基础的朋友

声明:以下学习路线是我在自学jetpack compose开发app时摸索出来的,不保证是最好的方式,但我认为这是一种既能保证快速入门又能打好基础的方式

第一阶段:打好基础,了解学习方法

  1. 复习java基础,主要是抽象类,接口,单例这些基本知识要掌握好。单例可以先不掌握,主要是源码中经常会出现单例模式,学习了单例可以方便以后进阶。
  2. 看一下扔物线关于compose的学习经验【扔物线】关于学习 Compose,我的经验总结和建议

第二阶段:学习compose常用布局和kotlin语法,入门compose

  1. (强烈推荐)学习扔物线的kotlin视频课,因为该系列视频课程讲得生动形象,而且也很有深度,不是仅仅粗浅的将一下kotlin的基础知识,而是系统深入地讲解了实际开发中用到的kotlin高级语法。
  2. 跟着jetpack compose博物馆看一看compose的原理的基本布局组件,了解功能即可,在实战中用到哪个组件我们再跟着学哪个

第三阶段:实战

  1. 选择一个实战项目,在实战中应用上面所学,并且在实战中学习compose开发的常用组件,这里也推荐扔物线在bilibili上的一门实战课【元旦特惠】扔物线Jetpack Compose只用看前三节免费课学习如何构建仿微信的界面就够了,后面想进阶的话可以考虑购买剩下部分,讲得确实非常好,等以后深入学习安卓我打算购买的。

入门难点:详解

lamda表达式

lambda表达式介绍

  1. lamda表达式是一种匿名函数,也就是没有定义名字的,往往是嵌套在其他代码块内的函数,可以用来将函数作为参数传递或者嵌套逻辑。
  2. lambda表达式的目的是为了简化表达,提高代码清晰度

lambda表达式的定义

1.(常用)直接定义 Lambda 表达式

优点:

  1. 用起来简洁
  2. 参数类型:在 Lambda 内部定义(x: Int, y: Int)。
  3. 返回值类型:由 Lambda 内最后一行代码推导(这里是 Int)。
    1
    2
    3
    4
    5
    6
    # 用法
    { 参数列表 -> 函数体 }

    # 例如
    val add = { a: Int, b: Int -> a + b }
    println(add(2, 3)) // 输出 5
2.显式声明 Lambda 的类型
  • 优点:
  1. 代码更清晰:适合复杂 Lambda,或者需要在接口中统一类型的场景
    1
    2
    3
    4
    5
    # 用法
    val 函数名:(变量类型)->返回值 = {函数体}
    # 例如
    val subtract: (Int, Int) -> Int = { x, y -> x - y }
    println(subtract(7, 4)) // 输出 3
  • 使用场景:
  1. Lambda 较复杂,需要明确参数和返回值类型。
  2. 需要在多个地方复用相同类型的 Lambda。
1
2
3
4
5
6
7
8
9
10
val multiply: (Int, Int) -> Int = { x, y -> x * y }
val divide: (Int, Int) -> Int = { x, y -> x / y }

fun calculate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}

println(calculate(6, 2, multiply)) // 输出 12
println(calculate(6, 2, divide)) // 输出 3

两种方式的对比
特性 直接定义 Lambda 显式声明 Lambda 类型
简洁性 更简洁,适合上下文明确的场景 更详细,适合复杂场景
类型定义 在 Lambda 内定义 在外部显式声明
适用场景 简单逻辑、上下文能推导类型的场景 需要明确类型或复杂逻辑时
代码可读性 对于熟悉的上下文,代码非常直观 适合陌生场景或团队协作

lambda表达式的使用之一:作为函数参数

使用方法
简化写法
  1. Lambda 是函数的最后一个参数,可以移到括号外

假设我们有一个函数 doOperation,接受两个整数和一个 Lambda 表达式作为参数:

1
2
3
fun doOperation(a: Int, b: Int, operation: (Int, Int) -> Int): Int {     
return operation(a, b)
}

如果调用它时,Lambda 是最后一个参数,可以将 Lambda 从括号中移出去:

普通写法(Lambda 在括号内):

1
2
3
val result = doOperation(5, 3, { x, y -> x + y }) 

println(result) // 输出 8

移到括号外的写法:

1
2
3
val result = doOperation(5, 3) { x, y -> x + y } 

println(result) // 输出 8

好处是更简洁,也符合 Kotlin 的习惯用法。

未完待续

由于接下来一段时间打算准备学习之后工作用的知识了,这段学习就告一段落啦(先挖个坑),之后用到jetpack compose时继续填坑~

下次更新的内容有:

  1. 状态提升

Jetpack compose入门
http://lightandsqlt.site/2024/12/31/学习/jetpack compose学习/
作者
Ethan
发布于
2024年12月31日
许可协议