Jetpack Compose: отключить взаимодействие с TextField
Есть ли способ отключить все взаимодействия для TextField Jetpack Compose?
3 ответа
С
1.0.0-beta02
вы можете использовать <strong></strong> атрибут:
enabled
: контролирует включенное состояние
TextField
. Когда
false
, текстовое поле не будет ни редактируемым, ни фокусируемым, ввод текстового поля не будет выбираться, визуально текстовое поле будет отображаться в отключенном состоянии пользовательского интерфейса
Что-то вроде:
var text by rememberSaveable { mutableStateOf("Text") }
TextField(
value = text,
onValueChange = { text = it },
enabled = false,
label = { Text("Label") },
singleLine = true
)
Мой проект включен
alpha08
атм. Надеюсь, они скоро добавят какой-нибудь встроенный способ сделать это, но пока что я делал это:
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()
на невидимом поле будет соответствовать текстовому полю, поскольку они являются единственными дочерними элементами в родительском поле.
Вы можете переключить отключенное состояние, установив
disabled.value = true/false
везде, где это уместно.
readOnly
Атрибут также может работать в случае, если вам нужно фокусируемое и выбираемое текстовое поле, но не редактируемое.
Так:
var value by remember { mutableStateOf("Hello World!") }
TextField(
value = value,
onValueChange = { value = it },
readOnly = true,
)