我尝试了下面的代码,发现屏幕底部没有显示snackbar。我的任务是在单击按钮时显示snackbar。我在函数DisplaySnackBarOnClik()的列中编写了与显示按钮相关的代码。显示snackbar的代码在MySnackBar()中编写。有人能通过观察下面的代码帮助我在屏幕底部显示snackbar吗?
@Composable
fun DisplaySnackBarOnClik() {
var canShowSnackBar by remember {
mutableStateOf(false)
}
Column(
modifier = Modifier
.verticalScroll(rememberScrollState())
.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(5.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Button(
onClick = { canShowSnackBar = ! canShowSnackBar },
modifier = modifier,
enabled = isEnabled,
elevation = ButtonDefaults.elevation(
defaultElevation = 10.dp,
pressedElevation = 15.dp,
disabledElevation = 0.dp
),
colors = ButtonDefaults.buttonColors(
backgroundColor = colorResource(R.color.cgux_primary_700),
contentColor = colorResource(R.color.white)
)
) {
Text(text = "Show Snack Bar")
}
if (canShowSnackBar) {
MySnackbar("Hello, Snackbar!", "Dismiss")
}
}
@Composable fun MySnackbar(
message: String, actionLabel: String, duration: SnackbarDuration = SnackbarDuration.Short
) {
val snackbarHostState = remember { SnackbarHostState() }
LaunchedEffect(snackbarHostState) {
snackbarHostState.showSnackbar(message, actionLabel, duration = duration)
}
Box(
Modifier.fillMaxSize(), contentAlignment = Alignment.BottomCenter
) {
SnackbarHost(
hostState = snackbarHostState
)
}
}
2条答案
按热度按时间bzzcjhmw1#
发生这种情况是因为
Box
和SnackbarHost
位于Column
和verticalScroll
内部。您必须将
Box
移到可滚动列之外。dxxyhpgq2#
你必须像这样把你的东西 Package 在盒子里。它的基本结构如下
最重要的是,你可以把盒子从你的
MySnackbar
组合中移开。详细答案