You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose 如何检测函数是否运行在预览模式下

Jetpack Compose 预览模式检测方案

可以直接通过Compose官方提供的原生API检测当前是否处于预览模式,无需手动给每个组件传入标记参数,完全无样板代码。


核心实现:使用LocalInspectionMode

Compose 内置了LocalInspectionMode这个 CompositionLocal 对象,会自动返回当前运行环境是否为IDE预览模式。

基础使用步骤

  1. 导入依赖(稳定版Compose默认包含,无需额外引入库):
import androidx.compose.ui.tooling.preview.LocalInspectionMode
  1. 在任意@Composable函数中直接获取状态:
@Composable
fun getAppStandardString(key: String): String {
    val isPreview = LocalInspectionMode.current
    return if (isPreview) {
        // 预览模式下返回模拟值,不依赖会导致预览失效的业务对象
        "预览模拟字符串_$key"
    } else {
        // 正式运行时走原有业务逻辑
        realBusinessDependency.getString(key)
    }
}

所有调用这个字符串工具函数的上层可组合项不需要做任何修改,也不需要传入额外参数,完全无侵入。


注意事项

  • 仅可在@Composable函数作用域内调用LocalInspectionMode.current,符合所有CompositionLocal的通用使用规则
  • Compose 1.0.0及以上稳定版本均支持该API,无兼容性问题
  • 所有IDE预览场景(普通预览、交互式预览、多设备/多配置预览)下该值均返回true,应用正式安装到设备运行时固定返回false

可选简化封装

如果项目中多处需要区分预览/正式逻辑,可以封装通用工具函数减少重复代码:

@Composable
inline fun <T> previewSafe(previewValue: T, realBlock: () -> T): T {
    return if (LocalInspectionMode.current) previewValue else realBlock()
}

封装后使用更简洁:

@Composable
fun getAppStandardString(key: String): String = previewSafe(
    previewValue = "预览模拟字符串_$key"
) {
    realBusinessDependency.getString(key)
}

内容的提问来源于stack exchange,提问作者iknow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:06:02