Jetpack Создает запрос на фокус, не работающий с диалогом

#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() in LaunchedEffect .