Изменение размера 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)
}
}```
Другие вопросы по тегам