想要快速上手 Android 的现代开发(Kotlin + Jetpack Compose),最核心的策略是**"略过历史包袱,直接学习现代架构"**。不要去学 Java,也不要去学 XML 布局和 Fragment 的复杂生命周期,直接切入声明式 UI。
以下是一份为你定制的极速上手路线图:
第一阶段:环境与基础 (耗时:约 1-2 天)
1. 安装工具
-
Android Studio (最新版):必须下载最新稳定版(目前是 Koala 或 Ladybug Feature Drop)。
-
新建项目 :选择 "Empty Activity" (注意图标是 Compose 的 Logo),不要选 "Empty Views Activity"。
2. Kotlin 语法速成 (只学 Compose 用得到的)
Compose 高度依赖 Kotlin 的特性,你不需要精通所有语法,但必须掌握以下几点:
-
变量:val (不可变) vs var (可变)。
-
Null 安全:String?, ?., ?: (Elvis 操作符)。
-
函数式编程:
-
Lambda 表达式:Compose 的核心。比如 { onClick() }。
-
尾随 Lambda (Trailing Lambda):如果函数的最后一个参数是函数,可以写在括号外面。这是 Compose 嵌套布局(如 Column { Text(...) })的基础。
-
-
Data Class:data class User(val name: String),用于存放数据。
-
Sealed Class / Interface:用于定义 UI 的状态(Success/Loading/Error)。
第二阶段:Compose 核心思维 (耗时:约 3-5 天)
1. 声明式 UI 概念
-
传统 XML:你需要"找"到这个控件,然后"设置"它 (findViewById -> textView.setText)。
-
Compose:你只需要"描述"界面,当数据变化,界面自动重绘 (Recomposition)。
- 口诀:UI 是状态(State)的函数。
2. 基础组件 (只需记住这几个)
不要死记硬背所有属性,用的时候查文档。
-
排版:Column (垂直), Row (水平), Box (堆叠,类似 FrameLayout)。
-
内容:Text, Button, Image, Icon, TextField。
-
列表:LazyColumn (相当于旧的 RecyclerView,但简单 100 倍)。
3. 修饰符 (Modifier) - 最重要!
所有组件的大小、背景、点击事件、边距都通过 Modifier 链式调用完成。
code Kotlin
downloadcontent_copy
expand_less
Text(
text = "Hello",
modifier = Modifier
.padding(16.dp)
.clickable { }
.background(Color.Red)
)
// 注意:顺序很重要,先 padding 后 background 和先 background 后 padding 效果不同。
4. 状态管理 (State) - 新手最大的坑
你需要理解为什么变量变了界面没变。
-
remember: 记住这个变量,防止重绘时被重置。
-
mutableStateOf: 告诉 Compose 这是一个可观察的状态,变了要刷新 UI。
code Kotlin
downloadcontent_copy
expand_less
// 标准写法
var count by remember { mutableStateOf(0) }
Button(onClick = { count++ }) {
Text("Count is $count")
}
第三阶段:架构与交互 (耗时:约 3-5 天)
不要把逻辑写在 UI 里,快速养成 MVVM 习惯。
1. ViewModel
使用 Jetpack 的 ViewModel 来持有状态。
code Kotlin
downloadcontent_copy
expand_less
class MainViewModel : ViewModel() {
// 使用 StateFlow 暴露状态给 UI
private val _uiState = MutableStateFlow("Initial")
val uiState = _uiState.asStateFlow()
fun updateData() { _uiState.value = "Updated" }
}
2. 状态提升 (State Hoisting)
子组件不要自己持有状态,要把事件抛给父组件(或 ViewModel)。
-
参数传入数据 (value)。
-
参数传入回调 (onValueChange)。
3. 导航 (Navigation Compose)
不要用 Fragment。使用单 Activity + Navigation Compose。
-
定义路由字符串 (e.g., "home", "details/{id}")。
-
使用 NavHost 和 NavController 进行页面跳转。
第四阶段:实战练习 (边做边学)
推荐的学习资源(按顺序):
-
Google 官方 Codelabs (必做):
-
搜索 "Jetpack Compose basics codelab"。这是最好的入门教程,跟着敲一遍代码。
-
接着做 "Basic layouts in Compose"。
-
-
官方文档:遇到不懂的组件直接查 Google Developer 文档,非常详细且有图示。
练手项目建议:
-
计数器 APP:熟悉 remember 和 mutableStateOf。
-
Todo List (待办清单):
-
使用 LazyColumn 显示列表。
-
使用 ViewModel 管理增删改查。
-
(进阶) 加入 Room 数据库进行本地存储。
-
-
天气/新闻 APP:
-
使用 Retrofit 请求网络数据。
-
使用 Coil 加载网络图片。
-
处理 Loading/Error/Success 三种 UI 状态。
-
避坑指南 (省时秘籍)
-
别碰 ConstraintLayout:在 Compose 中,95% 的布局都可以用 Column + Row + Box + Modifier.weight 解决,嵌套性能开销很小,不像 XML 时代需要扁平化。
-
别过度优化:刚开始不要纠结 recomposition 的性能问题,先把功能实现了。
-
Material Design 3:新建项目默认是 Material 3,确保你查看的教程不是基于老版本 Material 2 的(虽然大部分通用,但颜色和主题系统有区别)。
-
Side Effects (副作用):当你需要在 Composable 里启动协程(比如倒计时、网络请求),一定要去学 LaunchedEffect,不要直接在 UI 代码块里写逻辑。
总结上手代码模板
把你新建的 Activity 内容替换为以下代码,感受一下:
code Kotlin
downloadcontent_copy
expand_less
// MainActivity.kt
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MaterialTheme {
// 你的 App 入口
MyApp()
}
}
}
}
@Composable
fun MyApp() {
// 1. 定义状态
var name by remember { mutableStateOf("") }
// 2. 布局容器
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
// 3. 基础组件
Text(text = "Hello, ${if(name.isEmpty()) "Guest" else name}!", style = MaterialTheme.typography.headlineMedium)
Spacer(modifier = Modifier.height(16.dp))
TextField(
value = name,
onValueChange = { newName -> name = newName },
label = { Text("Enter your name") }
)
}
}
复制进去,运行,你就已经是一个 Compose 开发者了。然后在此基础上扩充功能即可。