Jetpack Compose 深入浅出(一)——预览 @Preview

在 Jetpack Compose 中,@Preview 是一个非常实用的注解,它允许你在 Android Studio 中实时预览 Composable 函数的 UI 效果,而无需运行应用到设备或模拟器上。这极大地提高了 UI 开发效率。

1.@Preview 基本用法

最基础的使用方式是在 Composable 函数上方添加 @Preview 注解:

kotlin

less 复制代码
@Preview
@Composable
fun MyPreview() {
    Text("Hello, Jetpack Compose!")
}

添加后,Android Studio 会在预览窗口中显示该 Composable 的效果,你可以实时看到代码修改后的 UI 变化。

2.@Preview 常用参数

@Preview 注解有多个可选参数,用于定制预览效果:

name:为预览命名,方便在多个预览中识别

go 复制代码
```
@Preview(name = "我的文本预览")
```

showBackground:是否显示背景(默认白色)

go 复制代码
```
@Preview(showBackground = true)
```

backgroundColor:指定背景颜色(需配合 showBackground 使用)

go 复制代码
```
@Preview(showBackground = true, backgroundColor = 0xFFE0E0E0) // 浅灰色背景
```

widthDp/heightDp:指定预览的宽度和高度(dp 单位)

go 复制代码
```
@Preview(widthDp = 200, heightDp = 100)
```

uiMode:指定 UI 模式,如深色模式、夜间模式等

go 复制代码
```
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) // 深色模式
```

fontScale:指定字体缩放比例,用于测试 accessibility

go 复制代码
kotlin

```
@Preview(fontScale = 1.5f) // 150% 字体大小
```

locale:指定预览的语言环境

kotlin 复制代码
```
@Preview(locale = "fr") // 法语环境
```

device:指定预览的设备型号

go 复制代码
```
@Preview(device = Devices.NEXUS_5) // 模拟Nexus 5设备
```

多个预览

你可以为同一个 Composable 创建多个不同配置的预览:

kotlin

less 复制代码
@Preview(name = "默认预览")
@Preview(name = "深色模式", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Preview(name = "大屏幕", device = Devices.PIXEL_C)
@Composable
fun MultiPreview() {
    MaterialTheme {
        Text("Hello, Multiple Previews!")
    }
}
kotlin 复制代码
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyApp()
        }
    }
}

// Composable 函数一般用大写开头,为了和普通的函数作为区分
// 实际业务组件
//@Preview  不能用于有参数的函数
@Composable
fun Greeting(name: String) {
    Text("Hello, $name!")
}

// 预览函数(仅用于预览,运行时不生效)
@Preview(showBackground = true, backgroundColor = 0xFFE0E0E0,name="background") // 浅灰色背景
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES, name = "Dark Theme")
@Preview(widthDp = 100, heightDp = 100,name="size")
@Composable
fun GreetingPreview() {
    Greeting("Preview Mode") // 这里的参数"Preview Mode"仅在预览中显示
}

// 应用入口(运行时实际执行的代码)
@Composable
fun MyApp() {
    Greeting("Actual User") // 运行时显示的内容
}

预览组合

你可以在一个预览函数中组合多个 Composable:

kotlin

less 复制代码
@Preview
@Composable
fun CombinedPreview() {
    MaterialTheme {
        Column {
            Button(onClick = {}) {
                Text("Click me")
            }
            TextField(value = "", onValueChange = {})
        }
    }
}

注意事项

  1. 带参数的 Composable 不能直接预览,需要创建一个无参的预览函数来调用它:

    kotlin

    kotlin 复制代码
    // 带参数的Composable
    @Composable
    fun Greeting(name: String) {
        Text("Hello, $name!")
    }
    
    // 预览函数
    @Preview
    @Composable
    fun GreetingPreview() {
        Greeting("Android")
    }
  2. 预览函数必须是无参的,并且被 @Composable 注解标记

  3. 预览不会执行 Composable 中的副作用(如 LaunchedEffect、rememberCoroutineScope 等)

  4. 可以通过点击预览窗口中的 "启动预览" 按钮,快速将预览部署到连接的设备或模拟器上

@Preview 是 Jetpack Compose 开发中不可或缺的工具,合理使用它可以显著提升 UI 开发效率和质量。随着你的学习深入,会发现它在多设备适配、主题切换等场景下的巨大价值。

相关推荐
alexhilton2 天前
用Konsist与Lint强制执行设计系统契约
android·kotlin·android jetpack
传奇开心果编程3 天前
组合优先开发范式:从汉字造字原理到声明式UI组件组合思想
android·flutter·ios·swiftui·移动开发·harmonyos·android jetpack
JMchen4 天前
【Jetpack 内核实战 08 】:组件整合——DataStore + Room 构建离线优先架构
架构·kotlin·android jetpack
Android打工仔4 天前
Compose 中何时该用 padding,何时该用 offset
android·android jetpack
hai_android10 天前
Android 设备锁定:Kiosk Mode 实战
android·java·android jetpack
stevenzqzq10 天前
Android Jetpack Compose 列表开发指南:为什么你不需要再为底部 Item 写额外间距
android·android jetpack
JMchen11 天前
【Jetpack 内核实战 02】ViewModel:生命周期管理与数据持久化核心实战
kotlin·android studio·android jetpack
alexhilton12 天前
Room Fts4:全文搜索替代 SQL LIKE
android·kotlin·android jetpack
hai_android12 天前
把 Android App 打包成系统应用(System App)
android·kotlin·android jetpack