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

Jetpack Compose BottomSheetScaffold如何设置底部表单展开时的顶部边距

实现底部表单顶部边距的最简方案

你完全不需要手动计算屏幕高度、导航栏高度等参数,有两种通用的实现方式:

方案1:使用高度比例自适应(适配所有屏幕尺寸)

直接对sheetContent的根布局使用fillMaxHeight(比例值),比例值即表单展开时占屏幕总高度的比例,比如设为0.9f就代表顶部自动留出10%的空白边距,代码示例如下:

val scaffoldState = rememberBottomSheetScaffoldState()
BottomSheetScaffold(
    sheetContent = {
        Column(
            modifier = Modifier
                // 表单展开最高占90%屏幕高度,顶部留10%边距
                .fillMaxHeight(0.9f)
                .fillMaxWidth()
                // 原sheetShape、sheetBackgroundColor移到这里设置
                .background(Color.Gray, RoundedCornerShape(topStart = 10.dp, topEnd = 10.dp))
                .padding(10.dp)
        ) {
            LazyColumn(modifier = Modifier.fillMaxSize()) {
                items(100) {
                    Text(text = "Sheet item $it")
                    Spacer(modifier = Modifier.height(10.dp))
                }
            }
        }
    },
    scaffoldState = scaffoldState,
    sheetPeekHeight = 100.dp,
    // scaffold自带的sheet背景设为透明
    sheetBackgroundColor = Color.Transparent
) { innerPadding ->
    Box(
        modifier = Modifier
            .fillMaxSize()
            .padding(innerPadding)
            .background(Color.Green),
        contentAlignment = Alignment.Center
    ) { Text(text = "Content") }
}

方案2:固定顶部边距数值

如果你需要顶部边距是固定数值(比如固定留64.dp),直接给根布局加顶部padding即可,代码示例:

val scaffoldState = rememberBottomSheetScaffoldState()
BottomSheetScaffold(
    sheetContent = {
        Column(
            modifier = Modifier
                .fillMaxSize()
                // 固定顶部边距64.dp
                .padding(top = 64.dp)
                .background(Color.Gray, RoundedCornerShape(topStart = 10.dp, topEnd = 10.dp))
                .padding(10.dp)
        ) {
            LazyColumn(modifier = Modifier.fillMaxSize()) {
                items(100) {
                    Text(text = "Sheet item $it")
                    Spacer(modifier = Modifier.height(10.dp))
                }
            }
        }
    },
    scaffoldState = scaffoldState,
    sheetPeekHeight = 100.dp,
    sheetBackgroundColor = Color.Transparent
) { innerPadding ->
    Box(
        modifier = Modifier
            .fillMaxSize()
            .padding(innerPadding)
            .background(Color.Green),
        contentAlignment = Alignment.Center
    ) { Text(text = "Content") }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:54:04