Изменение размера BasicTextField в Jetpack Compose
Есть ли способ создать BasicTextField с изменяемым размером в Jetpack Compose, чтобы его ширина оборачивалась размером текста, когда пользователь вводит или удаляет символы? Они решили аналогичную проблему для флаттера, но я не нашел, как решить эту проблему для Compose.Flutter - как подогнать ширину TextField к тексту («обернуть содержимое»)
var text: String by rememberSaveable { mutableStateOf("") }
BasicTextField(
value = text,
onValueChange = {
text = it
},
modifier = Modifier.wrapContentWidth()
)
к несчастью,
wrapContentWidth()
здесь не работает.
3 ответа
Ну похоже
width(IntrinsicSize.Min)
решает эту проблему:
var text: String by rememberSaveable { mutableStateOf("") }
BasicTextField(
value = text,
onValueChange = {
text = it
},
modifier = Modifier.width(IntrinsicSize.Min)
)
Мы можем указать диапазон ширины (минимальная и максимальная ширина, которую может охватывать текстовое поле)
для ширины:-
modifier = Modifier.widthIn(1.dp, Dp.Infinity) // specified the min width as 1.dp
для высоты:-
modifier = Modifier.heightIn(1.dp, Dp.Infinity)
Составной код:-
Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
OutlinedTextField(
value = text,
onValueChange = {
text = it
},
modifier = Modifier.widthIn(1.dp, Dp.Infinity)
)
}
В
TextField
будет расти, когда мы будем печатать больше, пока
Dp.Infinity
. ( использовал
OutlinedTextField
для демонстрации, но мы можем использовать
BasicTextField
)
Layout(content = {
TextField(...)
}
){measurables, constraints ->
val placeable = measurables[0].measure(Constraints(constraints.minWidth, constraints.minHeight))
layout(constraints.maxWidth, constraints.maxHeight){
placeable.placeRelative(0,0)
}
}```