Jorgen's blog Jorgen's blog
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
newland
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

jorgen

Love it, make mistakes, learn, keep grinding.
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
newland
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Capacitor浅析
  • ADB调试
  • mlkit
  • face detection
  • Android中的Kotlin协程:告别回调地狱
  • Android性能优化实践与技巧
  • Android Jetpack Compose入门:构建现代UI的全新方式
    • 前言
    • 为什么选择Jetpack Compose?
      • 1. 简化开发流程
      • 2. 减少样板代码
      • 3. 实时预览
      • 4. 响应式编程
    • Compose基础概念
      • 1. Composable函数
      • 2. 状态管理
      • 3. 布局系统
    • 实战示例:构建一个简单的任务列表
      • 1. 添加依赖
      • 2. 定义数据模型
      • 3. 创建任务项组件
      • 4. 创建任务列表组件
      • 5. 创建主屏幕
      • 6. 在Activity中使用
    • 高级特性
      • 1. Material Design 3
      • 2. 动画
      • 3. Navigation
    • 最佳实践
      • 1. 保持Composable函数小而专注
      • 2. 使用状态提升
      • 3. 合理使用remember和mutableStateOf
      • 4. 遵循Material Design规范
    • 结语
  • Android Jetpack Compose入门与实践 - 构建现代Android UI
  • Android Jetpack Compose入门指南 - 构建现代UI的全新方式
  • Android Jetpack与架构组件-构建现代化应用
  • Android Jetpack架构组件:ViewModel与LiveData实战指南
  • Android Jetpack组件:构建现代Android应用的核心利器
  • Android Jetpack组件详解:构建现代化应用的核心
  • Android数据绑定与MVVM架构-构建现代化应用
  • Android架构组件:构建现代化应用的基石
  • Android架构组件与Jetpack-构建现代化应用的基石
  • Android架构组件与Jetpack-构建现代化应用的基础
  • Android架构设计之MVVM模式实战指南
  • 拥抱未来:Android Jetpack Compose入门指南
  • Android权限管理完全指南-从基础到实践
  • Android测试指南-从单元测试到UI测试的实践之路
  • Android依赖注入实战:从Dagger到Hilt的进化之路
  • Android网络编程完全指南-从HTTP到Retrofit的实践之路
  • Android数据持久化完全指南-从SharedPreferences到Room数据库
  • Android多线程与并发处理完全指南-从Thread到协程的进阶之路
  • Android应用打包与发布全流程指南-从签名到上架的实战之路
  • Android安全完全指南-从基础防护到高级加密的实战之路
  • android
Jorgen
2023-11-15
目录

Android Jetpack Compose入门:构建现代UI的全新方式

# 前言

作为一名Android开发者,我一直在寻找更高效、更简洁的方式来构建用户界面。传统的XML布局方式虽然成熟稳定,但随着应用复杂度的增加,维护起来也越来越困难。幸运的是,Google推出了Jetpack Compose,这是一套现代化的UI工具包,它彻底改变了我们构建Android应用的方式。

提示

Jetpack Compose是一个声明式的UI工具包,它让我们能够通过编写代码来构建UI,而不是使用XML。这种方式不仅更加简洁,而且提供了更好的开发体验和更强的可维护性。

今天,我想和大家一起探索Jetpack Compose的基本概念和使用方法,希望能帮助你快速上手这个强大的UI框架。

# 为什么选择Jetpack Compose?

在深入技术细节之前,让我们先看看为什么Jetpack Compose值得我们投入时间和精力学习。

# 1. 简化开发流程

传统的Android开发中,我们需要在XML中定义布局,然后在Activity或Fragment中查找并操作这些视图。这种方式不仅繁琐,而且容易出错。

// 传统方式
val textView = findViewById<TextView>(R.id.my_text_view)
textView.text = "Hello World!"
1
2
3

使用Jetpack Compose,我们可以直接在代码中构建UI:

// Compose方式
Text(text = "Hello World!")
1
2

# 2. 减少样板代码

Compose大大减少了我们需要编写的样板代码,让我们能够更专注于业务逻辑本身。

# 3. 实时预览

Compose提供了强大的实时预览功能,我们可以在不运行应用的情况下预览UI组件,大大提高了开发效率。

# 4. 响应式编程

Compose采用声明式编程模型,当状态变化时,UI会自动更新,无需手动处理视图状态。

# Compose基础概念

在开始编写Compose代码之前,我们需要了解几个核心概念。

# 1. Composable函数

在Compose中,UI是通过@Composable注解的函数来构建的。这些函数可以调用其他@Composable函数来构建复杂的UI。

@Composable
fun Greeting(name: String) {
    Text(text = "Hello, $name!")
}
1
2
3
4

# 2. 状态管理

Compose提供了多种方式来管理状态,其中最常用的是remember和mutableStateOf。

@Composable
fun Counter() {
    var count by remember { mutableStateOf(0) }
    
    Column {
        Text(text = "Count: $count")
        Button(onClick = { count++ }) {
            Text("Increment")
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11

# 3. 布局系统

Compose提供了多种布局组件,如Column、Row、Box等,用于构建复杂的UI布局。

@Composable
fun ProfileScreen() {
    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(16.dp)
    ) {
        Image(
            painter = painterResource(R.drawable.profile_image),
            contentDescription = "Profile Picture",
            modifier = Modifier.size(100.dp)
        )
        Spacer(modifier = Modifier.height(16.dp))
        Text(text = "John Doe", style = MaterialTheme.typography.h6)
        Text(text = "Android Developer", style = MaterialTheme.typography.body1)
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 实战示例:构建一个简单的任务列表

让我们通过一个实际的例子来了解如何使用Jetpack Compose构建一个简单的任务列表应用。

# 1. 添加依赖

首先,确保在build.gradle文件中添加了必要的依赖:

dependencies {
    implementation "androidx.compose.ui:ui:1.4.3"
    implementation "androidx.compose.material:material:1.4.3"
    implementation "androidx.compose.ui:ui-tooling-preview:1.4.3"
    debugImplementation "androidx.compose.ui:ui-tooling:1.4.3"
}
1
2
3
4
5
6

# 2. 定义数据模型

data class Task(
    val id: Int,
    val title: String,
    val completed: Boolean = false
)
1
2
3
4
5

# 3. 创建任务项组件

@Composable
fun TaskItem(
    task: Task,
    onToggle: (Task) -> Unit,
    onDelete: (Task) -> Unit
) {
    Row(
        modifier = Modifier
            .fillMaxWidth()
            .padding(8.dp),
        verticalAlignment = Alignment.CenterVertically
    ) {
        Checkbox(
            checked = task.completed,
            onCheckedChange = { onToggle(task) }
        )
        Spacer(modifier = Modifier.width(8.dp))
        Text(
            text = task.title,
            style = MaterialTheme.typography.body1,
            modifier = Modifier.weight(1f)
        )
        IconButton(onClick = { onDelete(task) }) {
            Icon(Icons.Default.Delete, contentDescription = "Delete task")
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 4. 创建任务列表组件

@Composable
fun TaskList(tasks: List<Task>, onToggle: (Task) -> Unit, onDelete: (Task) -> Unit) {
    LazyColumn {
        items(tasks) { task ->
            TaskItem(
                task = task,
                onToggle = onToggle,
                onDelete = onDelete
            )
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

# 5. 创建主屏幕

@Composable
fun TaskScreen() {
    var tasks by remember { mutableStateOf(listOf<Task>()) }
    var newTaskTitle by remember { mutableStateOf("") }

    Column {
        // 添加任务的输入框
        Row(
            modifier = Modifier.padding(8.dp),
            verticalAlignment = Alignment.CenterVertically
        ) {
            TextField(
                value = newTaskTitle,
                onValueChange = { newTaskTitle = it },
                modifier = Modifier.weight(1f)
            )
            Spacer(modifier = Modifier.width(8.dp))
            Button(onClick = {
                if (newTaskTitle.isNotBlank()) {
                    tasks = tasks + Task(
                        id = tasks.size + 1,
                        title = newTaskTitle
                    )
                    newTaskTitle = ""
                }
            }) {
                Text("Add")
            }
        }

        // 任务列表
        TaskList(
            tasks = tasks,
            onToggle = { task ->
                tasks = tasks.map { if (it.id == task.id) it.copy(completed = !it.completed) else it }
            },
            onDelete = { task ->
                tasks = tasks.filter { it.id != task.id }
            }
        )
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

# 6. 在Activity中使用

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MaterialTheme {
                TaskScreen()
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10

THEOREM

通过以上代码,我们已经成功创建了一个简单的任务列表应用。这个应用展示了Jetpack Compose的核心功能,包括状态管理、布局构建和事件处理。

# 高级特性

Jetpack Compose不仅提供了基础的UI构建能力,还包含了许多高级特性,帮助我们构建更复杂、更强大的应用。

# 1. Material Design 3

Jetpack Compose完全支持Material Design 3,我们可以轻松使用Material Design的组件和主题。

@Composable
fun Material3Example() {
    MaterialTheme(
        colorScheme = lightColorScheme(
            primary = Color(0xFF6200EE),
            secondary = Color(0xFF03DAC5)
        )
    ) {
        Surface(
            modifier = Modifier.fillMaxSize(),
            color = MaterialTheme.colorScheme.background
        ) {
            Column(
                modifier = Modifier.padding(16.dp),
                horizontalAlignment = Alignment.CenterHorizontally
            ) {
                Text(
                    text = "Material Design 3",
                    style = MaterialTheme.typography.headlineMedium
                )
                Spacer(modifier = Modifier.height(16.dp))
                Button(onClick = { /* Do something */ }) {
                    Text("Button")
                }
                Spacer(modifier = Modifier.height(8.dp))
                OutlinedButton(onClick = { /* Do something */ }) {
                    Text("Outlined Button")
                }
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 2. 动画

Compose提供了强大的动画API,让我们能够轻松添加流畅的动画效果。

@Composable
fun AnimatedVisibilityExample() {
    var isVisible by remember { mutableStateOf(true) }
    
    Column(
        modifier = Modifier.fillMaxSize(),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        AnimatedVisibility(
            visible = isVisible,
            enter = fadeIn() + expandVertically(),
            exit = fadeOut() + shrinkVertically()
        ) {
            Box(
                modifier = Modifier
                    .size(100.dp)
                    .background(MaterialTheme.colorScheme.primary)
            )
        }
        
        Spacer(modifier = Modifier.height(16.dp))
        
        Button(onClick = { isVisible = !isVisible }) {
            Text(if (isVisible) "Hide" else "Show")
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 3. Navigation

Compose Navigation库提供了声明式的导航API,让我们能够轻松管理应用中的导航流程。

@Composable
fun NavigationExample() {
    val navController = rememberNavController()
    
    NavHost(navController = navController, startDestination = "home") {
        composable("home") {
            HomeScreen(onNavigate = { navController.navigate("detail") })
        }
        composable("detail") {
            DetailScreen(onBack = { navController.popBackStack() })
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 最佳实践

在使用Jetpack Compose开发应用时,遵循一些最佳实践可以帮助我们写出更高质量、更易维护的代码。

# 1. 保持Composable函数小而专注

每个Composable函数应该只负责构建一小部分UI,这样可以使代码更加清晰和易于测试。

# 2. 使用状态提升

当多个Composable需要共享状态时,应该将状态提升到它们的共同父组件中。

# 3. 合理使用remember和mutableStateOf

只在需要时使用remember和mutableStateOf,避免不必要的重建。

# 4. 遵循Material Design规范

使用Material Design组件和模式,确保应用的一致性和可访问性。

# 结语

Jetpack Compose代表了Android UI开发的未来方向。它不仅简化了UI开发流程,还提供了更好的开发体验和更强的可维护性。虽然学习曲线可能有些陡峭,但投入时间学习绝对是值得的。

"Compose不仅仅是一个UI工具包,它是一种全新的思维方式,让我们能够以更直观、更高效的方式构建Android应用。"

如果你还没有尝试过Jetpack Compose,我强烈建议你从今天开始探索它。相信我,一旦你习惯了Compose的方式,你就再也不会想回到传统的XML布局了!

如果你有任何问题或想要分享你的Compose经验,欢迎在评论区留言讨论。让我们一起探索Android UI开发的无限可能!

"代码是诗歌,UI是艺术,Compose让它们完美融合。"

#Jetpack Compose#UI开发#Android开发
上次更新: 2026/01/28, 10:42:53
Android性能优化实践与技巧
Android Jetpack Compose入门与实践 - 构建现代Android UI

← Android性能优化实践与技巧 Android Jetpack Compose入门与实践 - 构建现代Android UI→

最近更新
01
LLM
01-30
02
intro
01-30
03
intro
01-30
更多文章>
Theme by Vdoing | Copyright © 2019-2026 Jorgen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式