首页 / Android 入门教程 / Compose 入门

Android 入门教程

Compose 入门

本教程共 100 篇 · 第 43 篇 · 更新于 2026-07-28 · 约 7 分钟阅读

AndroidAndroid 入门教程Jetpack ComposesetContentModifierPreview

43. Compose 入门

本节目标:学会配置 Compose 项目,写出第一个可组合界面,掌握 Text 显示文本和 Modifier 调整样式的基本用法,能用 @Preview 预览界面。

项目配置

Android Studio(Quail 2 代)创建新项目时,选择「Empty Activity」模板,它会自动配好 Compose。如果你手动配,需要这几步。

模块级 build.gradle.kts

android {
    buildFeatures {
        compose = true  // 开启 Compose
    }
    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }
}

dependencies {
    val composeBom = platform("androidx.compose:compose-bom:2024.12.01")
    implementation(composeBom)

    implementation("androidx.compose.ui:ui")
    implementation("androidx.compose.ui:ui-tooling-preview")
    implementation("androidx.compose.material3:material3")
    implementation("androidx.activity:activity-compose:1.9.3")

    debugImplementation("androidx.compose.ui:ui-tooling")
}
Note
  • Compose BOM(Bill of Materials)统一管理所有 Compose 库的版本,你不用逐个写版本号。用 BOM 后,依赖项里不写版本号即可。

第一个 Compose 界面

在 Activity 里用 setContent 设置界面,替代传统的 setContentView

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            // 这里写 Compose 界面
            Text("你好,Compose!")
        }
    }
}

setContent 接收一个 @Composable lambda,里面就是你的界面。运行项目,屏幕上会显示「你好,Compose!」。

Text 显示文本

Text 是最基本的文本组件:

@Composable
fun TextExample() {
    Text(
        text = "这是一段文字",
        color = Color.Blue,
        fontSize = 20.sp,
        fontWeight = FontWeight.Bold
    )
}

常用参数:

参数作用示例
text文本内容"Hello"
color文字颜色Color.Red
fontSize字号16.sp
fontWeight粗细FontWeight.Bold
maxLines最大行数1
overflow溢出处理TextOverflow.Ellipsis
Tip
  • sp 是字号单位(scale-independent pixels),会随系统字体大小缩放,适合文字。dp 是尺寸单位,不随字体缩放,适合间距、尺寸。

Modifier 修饰符

Modifier 是 Compose 里调整组件样式和行为的核心工具。它像一条链,把各种修饰操作串起来:

@Composable
fun ModifierExample() {
    Text(
        text = "带样式的文字",
        modifier = Modifier
            .background(Color.Yellow)
            .padding(16.dp)
            .fillMaxWidth()
    )
}

常用 Modifier 方法:

方法作用
padding()内边距
background()背景
fillMaxWidth()填满宽度
fillMaxSize()填满整个空间
size()指定尺寸
clickable()点击事件
border()边框
clip()圆角裁剪

Modifier 顺序很重要

Modifier 是按顺序应用的,顺序不同效果不同:

// 先 padding 再 background:背景只包住文字外的间距
Modifier.padding(16.dp).background(Color.Red)

// 先 background 再 padding:背景包括间距区域
Modifier.background(Color.Red).padding(16.dp)
Warning
  • 把 Modifier 当作从外到内的洋葱。链上前面的修饰影响外层,后面的影响内层。顺序写错是 Compose 新手最常遇到的问题之一。

Modifier 作为参数传递

自定义可组合函数时,通常第一个参数放 Modifier,让调用方能调整样式:

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Text(
        text = "你好,$name",
        modifier = modifier.padding(8.dp)
    )
}

// 调用方可以追加自己的修饰
Greeting(
    name = "小明",
    modifier = Modifier.fillMaxWidth()
)
Tip
  • 习惯上 Modifier 参数放在第一个位置,并给默认值 Modifier。这是官方推荐的最佳实践。

@Preview 预览

@Preview 注解让你不运行应用就能在 Android Studio 里看到界面效果:

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
    Greeting("Android")
}

在代码编辑器右上角或分屏视图里会显示预览。改了代码,预览自动刷新。

Preview 常用参数:

参数作用
showBackground显示白色背景
showSystemUi显示状态栏和导航栏
widthDp / heightDp预览尺寸
name预览名称
@Preview(name = "浅色模式")
@Preview(name = "深色模式", uiMode = UI_MODE_NIGHT_YES)
@Composable
fun GreetingPreview() {
    MyTheme {
        Greeting("Android")
    }
}
Note
  • Preview 函数不能有参数,必须是 @Composable 且返回 Unit。它只用于开发预览,不参与正式编译产物。可以写多个 Preview 函数预览不同状态。

完整的第一个例子

把前面学的组合起来,写一个带样式的问候界面:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            GreetingScreen()
        }
    }
}

@Composable
fun GreetingScreen() {
    Column(
        modifier = Modifier
            .fillMaxSize()
            .background(Color(0xFFF5F5F5))
            .padding(24.dp),
        horizontalAlignment = Alignment.CenterHorizontally,
        verticalArrangement = Arrangement.Center
    ) {
        Text(
            text = "欢迎来到 Compose",
            fontSize = 28.sp,
            fontWeight = FontWeight.Bold
        )
        Spacer(modifier = Modifier.height(16.dp))
        Text(
            text = "这是你的第一个 Compose 界面",
            color = Color.Gray
        )
    }
}

@Preview(showBackground = true)
@Composable
fun GreetingScreenPreview() {
    GreetingScreen()
}

Column 是垂直排列的布局容器(第 44 章详细讲),Spacer 是占位空白。

小结

setContent 替代 setContentView 进入 Compose 世界。Text 显示文字,Modifier 链式调整样式,@Preview 实时预览。记住 Modifier 顺序敏感,自定义组件把 Modifier 放第一个参数。下一节我们深入学习布局。