#android #android-jetpack-compose
Вопрос:
Я использую приведенный ниже код, чтобы попытаться сфокусироваться на текстовом поле и включить клавиатуру. В настоящее время текстовое поле запрашивает фокус, но клавиатура не отображается. Этот же код работает в другом проекте, над которым я работаю, но разница здесь в том, что этот код находится внутри составного диалогового окна, а другой код-нет, поэтому я не уверен, что это диалоговое окно, из-за которого клавиатура не отображается?
val textField = remember { FocusRequester() } Dialog(onDismissRequest = { openDialog.value = false dialogInput.value = "" }) { Column( modifier = Modifier .height(274.dp) .background(Color.Transparent) .clickable { openDialog.value = false dialogInput.value = "" } ) { OutlinedTextField( modifier = Modifier .height(64.dp) .background(Color.White) .focusRequester(textField), label = { Text( text = label, style = MaterialTheme.typography.body2.copy(color = Color.Black) ) }, value = dialogInput.value, onValueChange = { dialogInput.value = it events.filterPlayers(it) }, textStyle = MaterialTheme.typography.body2.copy(color = Color.Black), colors = TextFieldDefaults.textFieldColors( backgroundColor = Color.White, unfocusedIndicatorColor = Color.White, focusedIndicatorColor = Color.White ) ) DisposableEffect(Unit) { textField.requestFocus() onDispose {} } }
Комментарии:
1. Я использую
LaunchedEffect(Unit)
и столкнулся с той же проблемой. Добавление небольшой задержки (200 мс), кажется, работает нормально, прежде чем.requestFocus()
, кажется, заставить его работать. Банально, но это уже кое-что.2. Вместо
delay(200)
этого вы также можете использоватьawaitFrame()
inLaunchedEffect
.