как измерить высоту текстового поля

#android #kotlin #layout #android-jetpack #android-jetpack-compose

Вопрос:

введите описание изображения здесь

код:

 val focusManager = LocalFocusManager.current
var code by remember { mutableStateOf("") }
var money by remember { mutableStateOf("") }

Column() {
    Row() {
        TextField(
            modifier = Modifier.wrapContentSize(),
            value = code,
            keyboardOptions = KeyboardOptions(
                keyboardType = KeyboardType.Number,
                imeAction = ImeAction.Done
            ),
            keyboardActions = KeyboardActions(onDone = {
                focusManager.clearFocus()
            }),
            singleLine = true,

            label = { Text("Code") },
            onValueChange = { pscCode ->
                code = pscCode.filter { it.isDigit() }.take(16)
            })
        Button(modifier = Modifier.fillMaxWidth(),
            onClick = {…}
        )
        {
            Text("Save data")
        }
    }
    Row() {
        TextField(
            modifier = Modifier.wrapContentSize(),
            value = money,
            singleLine = true,
            keyboardOptions = KeyboardOptions(
                keyboardType = KeyboardType.Number,
                imeAction = ImeAction.Done
            ),
            keyboardActions = KeyboardActions(onDone = {
                focusManager.clearFocus()
            }),
            label = { Text("Money amount") },
            onValueChange = { moneyAmount ->
                money = moneyAmount
                    .trim()
                    .replace(",", ".")
                    .take(5)
            })

        Button(modifier = Modifier.fillMaxWidth(),
            onClick = {…}
        ) {
            Text("Clean data")
        }
    }
}
 

Я пытался сопоставить размер кнопок с размером текстовых полей, но я не нашел способа, я пытался измерить высоту текстовых полей (без результатов), есть ли лучший (и рабочий) способ заполнить эти пробелы?
Заранее спасибо 🙂

Ответ №1:

Используйте внутренние измерения:

    Row(Modifier.height(IntrinsicSize.Min)) {
            TextField( /* your code */)
            Button(
                modifier = Modifier.fillMaxHeight(),
                onClick = {}
            )
            {
                Text("Save")
            }
        }
 

введите описание изображения здесь

Как объяснено в документе:

Составная строка minIntrinsicHeight будет максимальной minIntrinsicHeight из ее дочерних элементов. Button Элемент minIntrinsicHeight 0 , так как он не занимает места, если не задано никаких ограничений; TextField minIntrinsicHeight это будет текст, заданный определенной шириной. Таким образом, Row ограничение по высоте элемента будет максимальным minIntrinsicHeight TextField . Button затем увеличит свою высоту до ограничения высоты, заданного Row .

Ответ №2:

Ответ Филиппа также должен был сделать это.

Еще один обходной путь

 var textFieldHeight: Dp

BoxWithConstraints(Modifier.wrapContentSize()) {

 TextField()
 textFieldHeight = maxHeight

}