android 如何显示一个屏幕填充CircularProgressIndicator,它阻止了Jetpack Compose中的底层按钮?

rryofs0p  于 2023-05-05  发布在  Android
关注(0)|答案(2)|浏览(138)

我的目标是在我的代码中有一个变量,我可以简单地将其设置为true,然后重叠的Composable将在中间显示一个小CircularProgressIndicator和一个浅灰色的透明背景,该背景阻止视图下的输入。很多工作,除了一件事:我仍然可以在背景下按按钮。这是我的代码:

@Composable
fun ViewWithOverlaysView(mutableState: MutableState<Boolean>) {
    Box {
        Button(onClick = {
            println("Pressed!!")

            mutableState.value = true
        }) {
            Text("XX")
        }
        Spacer(modifier = Modifier.height(Dp(100f)))
        LoadingView(mutableState = mutableState)
    }
}

@Composable
fun LoadingView(mutableState: MutableState<Boolean>) {
    if (mutableState.value) {
        Box(
            modifier = Modifier
                .fillMaxSize()
                .background(
                    Color.LightGray.copy(alpha = 0.5f)
                )
        ) {
            Center {
                CircularProgressIndicator()
            }
        }
    }
}

现在看起来像这样,XX按钮仍然可以按下。如何确保用户看到透明的背景,但无法按下LoadingView下方的任何按钮?

x8goxv8g

x8goxv8g1#

将此修改器添加到Box工作:

.clickable(enabled = false) { }
ajsxfq5m

ajsxfq5m2#

您可以使用Button组合的enabled属性来控制其可点击性:

Button(
            onClick = {
                println("Pressed!!")
                mutableState.value = true
            },
            enabled = !mutableState.value
        ) {
            Text("XX")
        }

相关问题