我将给出一个问题的示例,假设我在框中有两个按钮
@Preview
@Composable
fun testView() {
Box(modifier = Modifier
.size(200.dp)
) {
Button(onClick = {
Log.e("HERE", "First btn")
}) {
Text(text = "Btn1")
}
Button(modifier = Modifier
onClick = {
Log.e("HERE", "Second btn")
}) {
Text(text = "Btn2")
}
}
}
当我运行应用程序时,我会看到
Btn2
(实际上位于 Btn1
的顶部),当我单击日志时,我会按预期看到 Second btn
。
假设我需要隐藏
Btn2
,以便用户可以单击 Btn1
,为了以旧方式执行此操作,我会添加 View.GONE
并且它会起作用,但是在 JetpackCompose 中(据我所知)有只有 alpha
选项,所以我尝试将其设置为 0f
像这样
...
Button(modifier = Modifier
.alpha(0f),
onClick = {
Log.e("HERE", "Second btn")
}) {
Text(text = "Btn2")
}
...
当我运行应用程序时,我在屏幕上看到(如预期)
Btn1
,但是,当我单击时,我在日志中看到Second btn
。
因此,很明显
alpha
正在改变可见性,但视图本身仍然存在。
问题是
View.GONE
还有以前的替代品吗?
如果您希望第二个按钮消失,那么方法就是不输出第二个按钮。
if( some_condition) {
Button(modifier = Modifier
onClick = {
Log.e("HERE", "Second btn")
}) {
Text(text = "Btn2")
}
}
如果 some_condition 为 false,则不会输出 Button,也不会出现。
你需要创建一个触发重组的对象,当状态改变时触发重组。
var isSplash by mutableStateOf(true)
if (isSplash) {
SplashView()
isSplash = false
} else {
Main()
//...
}