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

Android Compose Preview中Text与状态栏重叠,设备显示正常求助

问题

使用Android Studio(Panda 4 | 2025.3.4 Patch 1)创建首个Compose项目,选择Empty Activity后未编写任何代码。在设备上运行时,"Hello Android!"正常显示在屏幕左上角;但在Mac端开启showSystemUi = true的Preview中,文本与状态栏发生重叠。自动生成的代码如下:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            ComposeDemoTheme {
                Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
                    Greeting(
                        name = "Android",
                        modifier = Modifier.padding(innerPadding)
                    )
                }
            }
        }
    }
}

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Text(
        text = "Hello $name!",
        modifier = modifier
    )
}

@Preview(showSystemUi = true)
@Composable
fun GreetingPreview() {
    ComposeDemoTheme {
        Greeting("Android")
    }
}
解决方案

问题出在Preview代码与Activity的适配逻辑不一致:

  • Activity中调用了enableEdgeToEdge()开启全屏适配,同时通过Scaffold的innerPadding自动处理了状态栏、导航栏的间距,确保内容不会被系统UI遮挡。
  • 但你的Preview直接渲染Greeting组件,既没有开启Edge-to-Edge适配,也没有添加对应的间距,导致文本和状态栏重叠。

有两种修复方式:

方式一:与Activity保持完全一致的结构

修改Preview代码,加入enableEdgeToEdge和Scaffold,复用Activity的适配逻辑:

@Preview(showSystemUi = true)
@Composable
fun GreetingPreview() {
    ComposeDemoTheme {
        // 启用Edge-to-Edge适配,和Activity逻辑对齐
        SideEffect {
            val window = (LocalContext.current as Activity).window
            enableEdgeToEdge(window = window)
        }
        Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
            Greeting(
                name = "Android",
                modifier = Modifier.padding(innerPadding)
            )
        }
    }
}

方式二:仅添加状态栏间距(简化版)

如果不需要完整的Edge-to-Edge效果,直接给Greeting添加状态栏高度的顶部内边距即可:

@Preview(showSystemUi = true)
@Composable
fun GreetingPreview() {
    ComposeDemoTheme {
        Greeting(
            name = "Android",
            modifier = Modifier.padding(top = WindowInsets.statusBars.asPaddingValues().calculateTopPadding())
        )
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 11:34:50