Anonymous
FocusRequester() и LocalFocusManager не работают должным образом при создании реактивного ранца
Сообщение
Anonymous » 26 сен 2024, 00:24
У меня есть два TextField, чтобы обеспечить хороший UX, я попытался использовать свойства KeyboardOptions и KeyboardActions TextField. Я пробовал как:
Код: Выделить всё
val focusRequester = remember {
FocusRequester()
}
val localFocusManager = LocalFocusManager.current
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween
) {
Column(
modifier = Modifier.weight(1f)
) {
Text(
modifier = Modifier.fillMaxWidth().padding(
horizontal = 16.dp,
vertical = 8.dp
),
text = "Date",
style = TextStyle(
color = MaterialTheme.colorScheme.onSurface,
fontSize = 18.sp,
fontWeight = FontWeight.Bold
)
)
TextField(
modifier = Modifier.fillMaxWidth().padding(
end = 8.dp
).focusRequester(
focusRequester = focusRequester
).onFocusEvent {
if (it.isFocused) {
showDatePicker = true //changing the visibility state
} else {
showDatePicker = false
}
},
value = inputDate,
onValueChange = { inputDate = it },
placeholder = {
Text(text = "dd/mm/yy")
},
leadingIcon = {
Icon(
modifier = Modifier.size(24.dp),
imageVector = ImageVector.vectorResource(R.drawable.calendar_days_svgrepo_com),
contentDescription = "Date icon")
},
keyboardOptions = KeyboardOptions(
imeAction = ImeAction.Next
),
keyboardActions = KeyboardActions(
onNext = {
localFocusManager.moveFocus(
focusDirection = FocusDirection.Next
)
}
)
)
}
Column(
modifier = Modifier.weight(1f)
) {
Text(
modifier = Modifier.fillMaxWidth().padding(
horizontal = 16.dp,
vertical = 8.dp
),
text = "Time",
style = TextStyle(
color = MaterialTheme.colorScheme.onSurface,
fontSize = 18.sp,
fontWeight = FontWeight.Bold
)
)
TextField(
modifier = Modifier.fillMaxWidth().padding(
start = 8.dp
).focusRequester(
focusRequester = focusRequester
).onFocusEvent {
if (it.isFocused) {
showTimePicker = true //changing the visibility state
} else {
showTimePicker = false
}
},
value = inputTime,
onValueChange = { inputTime = it },
placeholder = {
Text(text = "Time")
},
leadingIcon = {
Icon(
modifier = Modifier.size(24.dp),
imageVector = ImageVector.vectorResource(R.drawable.stopwatch_svgrepo_com),
contentDescription = "Time icon")
},
keyboardOptions = KeyboardOptions(
imeAction = ImeAction.Done
),
keyboardActions = (
KeyboardActions(
onNext = {
localFocusManager.clearFocus()
}
)
)
)
}
}
В приведенном выше коде отображаются кнопки «Далее» и «Готово», при нажатии кнопки «Далее» фокус не меняется на следующее текстовое поле.
Что-то не хватает или я делаю неправильно, пожалуйста, подскажите.
Подробнее здесь:
https://stackoverflow.com/questions/790 ... ck-compose
1727299441
Anonymous
У меня есть два TextField, чтобы обеспечить хороший UX, я попытался использовать свойства KeyboardOptions и KeyboardActions TextField. Я пробовал как: [code]val focusRequester = remember { FocusRequester() } val localFocusManager = LocalFocusManager.current Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween ) { Column( modifier = Modifier.weight(1f) ) { Text( modifier = Modifier.fillMaxWidth().padding( horizontal = 16.dp, vertical = 8.dp ), text = "Date", style = TextStyle( color = MaterialTheme.colorScheme.onSurface, fontSize = 18.sp, fontWeight = FontWeight.Bold ) ) TextField( modifier = Modifier.fillMaxWidth().padding( end = 8.dp ).focusRequester( focusRequester = focusRequester ).onFocusEvent { if (it.isFocused) { showDatePicker = true //changing the visibility state } else { showDatePicker = false } }, value = inputDate, onValueChange = { inputDate = it }, placeholder = { Text(text = "dd/mm/yy") }, leadingIcon = { Icon( modifier = Modifier.size(24.dp), imageVector = ImageVector.vectorResource(R.drawable.calendar_days_svgrepo_com), contentDescription = "Date icon") }, keyboardOptions = KeyboardOptions( imeAction = ImeAction.Next ), keyboardActions = KeyboardActions( onNext = { localFocusManager.moveFocus( focusDirection = FocusDirection.Next ) } ) ) } Column( modifier = Modifier.weight(1f) ) { Text( modifier = Modifier.fillMaxWidth().padding( horizontal = 16.dp, vertical = 8.dp ), text = "Time", style = TextStyle( color = MaterialTheme.colorScheme.onSurface, fontSize = 18.sp, fontWeight = FontWeight.Bold ) ) TextField( modifier = Modifier.fillMaxWidth().padding( start = 8.dp ).focusRequester( focusRequester = focusRequester ).onFocusEvent { if (it.isFocused) { showTimePicker = true //changing the visibility state } else { showTimePicker = false } }, value = inputTime, onValueChange = { inputTime = it }, placeholder = { Text(text = "Time") }, leadingIcon = { Icon( modifier = Modifier.size(24.dp), imageVector = ImageVector.vectorResource(R.drawable.stopwatch_svgrepo_com), contentDescription = "Time icon") }, keyboardOptions = KeyboardOptions( imeAction = ImeAction.Done ), keyboardActions = ( KeyboardActions( onNext = { localFocusManager.clearFocus() } ) ) ) } } [/code] В приведенном выше коде отображаются кнопки «Далее» и «Готово», при нажатии кнопки «Далее» фокус не меняется на следующее текстовое поле. Что-то не хватает или я делаю неправильно, пожалуйста, подскажите. Подробнее здесь: [url]https://stackoverflow.com/questions/79022675/focusrequester-and-localfocusmanager-not-working-properly-in-jetpack-compose[/url]