Я работаю над устаревшей кодовой базой, в которой используется EditText, и пытаюсь внедрить композицию в наше приложение. Играя с составным элементом AndroidView(...), я заметил, что программная клавиатура закрывается при переключении с собственного составного элемента TextField на устаревший EditText, завернутый в составной элемент AndroidView. Вместо этого я бы ожидал, что программная клавиатура останется видимой при передаче фокуса между двумя текстовыми полями.
В качестве примера возьмем следующий фрагмент кода создания. Если вы сначала щелкните TextField, а затем щелкните EditText, программная клавиатура закроется. Однако если вместо этого вы сначала выберете EditText, а затем выберите TextField, программная клавиатура останется открытой, как и ожидалось.
Код: Выделить всё
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
KeyboardFocusSandboxTheme {
Column(
modifier = Modifier
.wrapContentSize()
) {
TextField(
value = "TextField",
onValueChange = {}
)
AndroidView(
factory = {
val v = EditText(it)
v.setText("EditText")
v
}
)
}
}
}
}
}
Я пробовал использовать FocusManager и LocalSoftwareKeyboardController с модификаторами, чтобы принудительно запросить/освободить фокус, а также заставить программную клавиатуру появляться. К сожалению, похоже, ничего не работает, и я не уверен, что еще доступно в Android/Compose API для решения этой проблемы, поскольку это, похоже, собственная ошибка Android Compose SDK.
Подробнее здесь:
https://stackoverflow.com/questions/790 ... xtfield-to