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
相关产品推荐
相关产品推荐

