Jetpack Compose中是否有对应@tools:sample/*的预览模拟数据方案?
方案1:通过资源引用复用原有@tools:sample/*资源
你完全可以在Compose中继续沿用原来的@tools:sample/*系列模拟资源,只需要做一层简单的资源映射即可:
- 首先在
res/values目录下创建一个专用于预览的资源文件(例如preview_samples.xml),把需要用到的sample资源预先声明为普通字符串资源:
<resources> <string name="sample_full_name">@tools:sample/full_names</string> <string name="sample_first_name">@tools:sample/first_names</string> <string name="sample_city">@tools:sample/cities</string> <string name="sample_date">@tools:sample/dates</string> </resources>
- 之后在Compose函数中直接通过
stringResource()读取这些资源即可,和原有XML的使用逻辑完全一致:只有Android Studio预览时会加载模拟数据,正式打包不会带入这些工具类资源,不会对线上包产生影响。
@Composable @Preview fun UserInfoCardPreview() { UserInfoCard( userName = stringResource(R.string.sample_full_name), location = stringResource(R.string.sample_city), joinDate = stringResource(R.string.sample_date) ) }
方案2:使用Compose原生@PreviewParameter方案
这是Jetpack Compose官方提供的模拟数据方案,更适合需要批量生成多组预览数据的场景:
- 首先实现
PreviewParameterProvider接口,定义你需要的模拟数据源:
// 示例数据类 data class UserInfo( val name: String, val city: String, val joinDate: String ) class UserInfoSampleProvider : PreviewParameterProvider<UserInfo> { override val values = sequenceOf( UserInfo("张三", "北京", "2023-01-15"), UserInfo("李四", "上海", "2022-11-03"), UserInfo("王五", "广州", "2023-06-20") ) }
- 在预览的Composable函数参数上添加
@PreviewParameter注解引入数据源,Android Studio会自动为每组数据生成对应的预览效果:
@Composable @Preview fun UserInfoCardPreview( @PreviewParameter(UserInfoSampleProvider::class) userInfo: UserInfo ) { UserInfoCard( userName = userInfo.name, location = userInfo.city, joinDate = userInfo.joinDate ) }
如果需要更灵活的随机模拟数据,也可以直接在预览代码中编写普通Kotlin逻辑生成随机内容,和日常开发代码没有差异,所有预览用的模拟代码都不会被打包到正式安装包中。
内容的提问来源于stack exchange,提问作者Kuruchy
相关产品推荐
相关产品推荐

