9

有没有办法禁用 Jetpack Compose 的 TextField 的所有交互?

4

2 回答 2

10

1.0.0您可以使用以下属性enabled

enabled: 控制TextField. 时false,文本框将不可编辑也不可聚焦,文本框的输入将不可选择,视觉上文本框将出现在禁用的 UI 状态

就像是:

var text by rememberSaveable { mutableStateOf("Text") }

TextField(
    value = text,
    onValueChange = { text = it },
    enabled = false,
    label = { Text("Label") },
    singleLine = true
)
于 2021-03-21T08:09:30.997 回答
5

我的项目在alpha08atm上。希望他们尽快添加一些内置的方法来做到这一点,但与此同时我一直在这样做:

val textState = remember { mutableStateOf(TextFieldValue()) }
val disabled = remember { mutableStateOf(true) }
Box {
  TextField(value = textState.value, onValueChange = {
    textState.value = it
  })
  if (disabled.value) {
    // Set alpha(0f) to hide click animation
    Box(modifier = Modifier.matchParentSize().alpha(0f).clickable(onClick = {}))
  }
}

所以,是的,在 TextField 上绘制一个大小相同的不可见可点击框。您可以将 TextField 调整为您想要的任何大小,调用.matchParentSize()不可见的 Box 将使其与 TextField 匹配,因为它们是父 Box 中唯一的孩子。

disabled.value = true/false您可以通过在适当的位置进行设置来切换禁用状态。

于 2020-12-18T17:27:12.173 回答