#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
}