#android #android-jetpack #android-jetpack-compose
#Android #android-jetpack #android-jetpack-compose
Вопрос:
Я использую AlertDialog от jetpack compose с текстовым полем внутри. Идея заключается в том, что пользователь должен ввести некоторый текст в текстовое поле и нажать подтвердить. Проблема в том, что после вставки текста в OutlinedTextField
, нужно нажать confirmButton
дважды — один раз для удаления фокуса с OutlinedTextField
(чтобы удалить программную клавиатуру) и один раз для фактического нажатия кнопки подтверждения.
Не совсем уверен, может ли такое поведение быть преднамеренным. Однако с «обычным» AlertDialog это не так.
Вот минимальный пример кода:
@Composable
private fun MyAlertDialog() {
val text = remember { mutableStateOf("") }
val hasConfirmed = remember { mutableStateOf(false) }
if (!hasConfirmed.value) {
AlertDialog(
title = { Text("Title") },
text = {
OutlinedTextField(
value = text.value,
onValueChange = {
text.value = it
},
label = {
ProvideEmphasis(emphasis = EmphasisAmbient.current.medium) {
Text(
text = stringResource(id = R.string.notes),
style = typography.body2
)
}
}
)
},
onDismissRequest = {
},
confirmButton = {
Button(onClick = {
hasConfirmed.value = true
},
) {
Text("Confirm")
}
}
)
} else {
Text("Confirmed")
}
}
Комментарии:
1. Кажется, это работает на Api 30; но для этого требуется два нажатия на Api 27, 28, 29 (протестировано только на эмуляторах с Api 27, 28, 29 и 30)
2. в настоящее время существует множество проблем с текстовыми полями и их фокусом внутри диалоговых окон. Возможно, вы захотите заглянуть в систему отслеживания проблем и добавить свой, если он еще не существует.
3. В настоящее время работает для меня одним щелчком мыши. Версия Compose: 1.0.3. Протестировано на устройстве с API 24.