Jetpack Compose 中的 View.GONE 替代方案?

问题描述 投票:0回答:2

我将给出一个问题的示例,假设我在框中有两个按钮

@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
还有以前的替代品吗?

android android-jetpack-compose android-jetpack
2个回答
5
投票

如果您希望第二个按钮消失,那么方法就是不输出第二个按钮。

if( some_condition) {
    Button(modifier = Modifier
        onClick = {
        Log.e("HERE", "Second btn")
    }) {
        Text(text = "Btn2")
    }
}

如果 some_condition 为 false,则不会输出 Button,也不会出现。


3
投票

你需要创建一个触发重组的对象,当状态改变时触发重组。

var isSplash by mutableStateOf(true)
if (isSplash) {
    SplashView()
    isSplash = false
} else {
    Main()
    //...
}
© www.soinside.com 2019 - 2024. All rights reserved.