如何处理 Jetpack Compose 中文本的可见性?

Tri*_*ity 5 android android-jetpack-compose

我有这个文本:

Text(
    text = stringResource(id = R.string.hello)
)
Run Code Online (Sandbox Code Playgroud)

如何显示和隐藏此组件?

我正在使用 Jetpack Compose 版本“1.0.0-alpha03”

Nag*_*obi 13

正如 CommonsWare 所说,compose 是一个声明性工具包,您将组件绑定到一个状态(例如:)isVisible,然后 compose 将智能地决定哪些可组合项依赖于该状态并重新组合它们。例如:

@Composable
fun MyText(isVisible: Boolean){
  if(isVisible){
     Text(text = stringResource(id = R.string.hello))
  }
}
Run Code Online (Sandbox Code Playgroud)

您也可以将AnimatedVisibility()可组合用于动画。

  • 这是一个很好的答案。但是,如果我需要一个元素占据其边界但不可见怎么办?我们曾经有View.VISIBLE、View.INVISIBLE 和View.GONE。使用 if 它只是实现 GONE 和 VISIBLE (19认同)
  • @SomerandomITboy那么我可能会将 if 移到修改器内,类似于“Modifier.opacity(if(isVisible) 1f else 0f)” (7认同)
  • 在 1.0.0-beta04 上尝试使用 ```Modifier.alpha(if(isVisible) 1f else 0f)``` (3认同)

Tia*_*ila 6

如上所述,您可以使用 AnimatedVisibility ,例如:

AnimatedVisibility(visible = yourCondition) { Text(text = getString(R.string.yourString)) }
Run Code Online (Sandbox Code Playgroud)

  • 这是仅在视图可见时创建文本,对吧?。有没有什么方法可以让我们先创建视图,然后控制它的可见性? (4认同)

Gab*_*tti 6

有了1.0.x你可以简单地添加一个条件,如:

  if(isVisible){
     Text("....")
  }
Run Code Online (Sandbox Code Playgroud)

就像是:

var visible by remember { mutableStateOf(true) }
Column() {
    Text("Text")
    Button(onClick = { visible = !visible }) { Text("Toggle") }
}
Run Code Online (Sandbox Code Playgroud)

如果您想为其内容的出现和消失设置动画,您可以使用 AnimatedVisibility

var visible by remember { mutableStateOf(true) }
Column() {
    AnimatedVisibility(
        visible = visible,
        enter = fadeIn(
            // Overwrites the initial value of alpha to 0.4f for fade in, 0 by default
            initialAlpha = 0.4f
        ),
        exit = fadeOut(
            // Overwrites the default animation with tween
            animationSpec = tween(durationMillis = 250)
        )
    ) {
        // Content that needs to appear/disappear goes here:
        Text("....")
    }
    Button(onClick = { visible = !visible }) { Text("Toggle") }
}
Run Code Online (Sandbox Code Playgroud)