AnimatedVisibility 不会扩展 Jetpack Compose 对话框中的高度

Age*_*ntP 18 android android-jetpack-compose

所以我的项目中有这个可组合项......

 @Composable
 private fun ShowDialog() {
        var showText by remember { mutableStateOf(false) }

        val text = if (showText) {
            "Hide Text"
        } else {
            "Show Text"
        }

        Dialog(onDismissRequest = { }) {
            Card(modifier = Modifier.padding(15.dp)) {
                Column(modifier = Modifier.padding(15.dp)) {
                    AnimatedVisibility(visible = showText) {
                        Text(
                           text = "Here is the show text sample",
                           modifier = Modifier.padding(5.dp),
                           style = MaterialTheme.typography.body1,
                           color= Color.Black
                        )
                    }

                    Button(onClick = { showText = !showText }) {
                        Text(text = text)
                    }
                }
            }


        }
    }
Run Code Online (Sandbox Code Playgroud)

如果您已经阅读了代码,您可能会明白它应该做什么。即它基本上是一个带有一个文本和下面一个按钮的对话框。当用户单击按钮时,按钮上方的文本将切换其可见性。

但代码的问题是,当我单击按钮时,文本出现,但按钮不可见,换句话说,文本占据空间并将按钮推到下面。但本例中的容器卡或列并没有扩展其高度。

它应该像那样工作吗?或者这是一个错误?

我尝试animateContentSize()了一下ColumnCard但没有成功。并在 StackOverflow 上检查了类似的问题,但没有找到任何有用的信息。

Age*_*ntP 36

幸运的是,我找到了这个问题的临时工作答案,

我们需要使用的只是DialogProperties(usePlatformDefaultWidth = false)作为对话框的属性传递parameter。这将使对话框像这样调整大小

    @Composable
    private fun ShowDialog() {
        var showText by remember { mutableStateOf(false) }

        val text = if (showText) {
            "Hide Text"
        } else {
            "Show Text"
        }

        Dialog(
            onDismissRequest = { },
            properties = DialogProperties(usePlatformDefaultWidth = false)
        ) {
            Card(
                modifier = Modifier
                    .padding(15.dp)
                    .wrapContentWidth()
                    .animateContentSize()
            ) {
                Column(modifier = Modifier.padding(15.dp).fillMaxWidth(1f)) {

                    AnimatedVisibility(visible = showText) {
                        Text(
                            text = "Sample",
                            modifier = Modifier
                                .padding(5.dp)
                                .fillMaxWidth(1f),
                            style = MaterialTheme.typography.body1,
                            color = Color.Black
                        )
                    }
                    Button(onClick = { showText = !showText }) {
                        Text(text = text)
                    }


                }
            }


        }
    }
Run Code Online (Sandbox Code Playgroud)

注意:它使用@ExperimentalComposeUiApi

此 API 是实验性的,将来可能会发生变化。

  • 我不明白为什么这可以让高度动态变化,但感谢您分享答案;你是个圣人 (2认同)