В настоящее время у меня есть
Код: Выделить всё
@Composable
fun Search(onHide: () -> Unit) {
var query by rememberSaveable { mutableStateOf("") }
BackHandler {
onHide() //works only when keyboard is already hidden
}
Column(modifier = Modifier.fillMaxHeight()) {
TextField(value = query, onValueChange = { query = it },
modifier = Modifier.focusRequester(focusRequester))
myItemsList.filter { it.title.startsWith(query) }.take(7).forEach {
SearchLine(it)
}
}
LaunchedEffect(key1 = focusRequester) {
focusRequester.requestFocus()
focusRequester.captureFocus()
// keyboardController.show() //it is shown due to focus anyway
}
}
Код: Выделить всё
fun Content() {
var searchMode by rememberSaveable { mutableStateOf(true) } //FIXME false
AppTheme {
Surface {
if (searchMode) {
Search(onHide = { searchMode = false })
} else {
/* normally available activtiy contents */
}
}
}
}
- показать/скрыть клавиатуру без анимации
- удалить верхняя панель GBoard (действия, стикеры, буфер обмена, голосовой ввод). KeyboardType.Password выполняет работу для GBoard на моем устройстве, но в целом это не совсем правильно.
Я пробовал:
- . Я не знаю, помогает ли это захватить фокус, мое TextField - это всего лишь объект, который можно фокусировать, и он все равно всегда в фокусе, но это не мешает пользователю скрывать клавиатуру.
Код: Выделить всё
BackHandler { }. Он просто не срабатывает, когда пользователь пытается скрыть клавиатуру. [*]Модификатор для TextField с помощью focusRequester.captureFocus() - Повозился с TextInputService.startInput()
- Повозился с TextInputService.startInput()
- code>, есть поля onEditCommand и onImeActionPerformed, они также не срабатывают, когда пользователь скрывает клавиатуру.
- То же самое касается KeyboardActions(onAny = {
}), скрытие вызывает не запускать его. - KeyboardOptions, предоставленные для TextField(), не имеют соответствующих параметров.
- Мне не нужна отдельная активность для поиска, но я попробовал Android :windowSoftInputMode="stateAlwaysVisible" в любом случае в манифесте. Это ничего не дало.
- показывает клавиатуру, но ее можно скрыть.
Код: Выделить всё
LaunchedEffect(key1 = focusRequester) { keyboardController.show() } - с токеном активности окна ничего не делал, насколько я понимаю, для Compose это не имеет значения.
Код: Выделить всё
imm!!.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)
Подробнее здесь: https://stackoverflow.com/questions/783 ... in-compose