我正在POS应用程序中制作搜索屏幕,并希望在文本字段存在时始终显示软件键盘.理想情况下,我想拦截用户将键盘隐藏到hide my search widget together with keyboard的事件.
目前我有
@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. Code在我的设备上完成了GBoard的工作,但总体上感觉不太对劲.
这些可能是相关的,因为如果也不可能,使用自定义应用内键盘是我的最佳 Select 吗?我宁愿不这样做,因为日本等一些棘手的地方.
我try 过:
-
BackHandler { <breakpoint> }
.当用户试图隐藏键盘时,它根本不会被触发. - 文本字段的修改器为
focusRequester.captureFocus()
.Idk如果它有助于捕捉焦点,我的文本字段只是可聚焦的东西,并且无论如何始终聚焦,但它并不能阻止用户隐藏键盘. - 摆弄
TextInputService.startInput()
,在EditCommands和onImeDelivered上有字段,当用户隐藏键盘时,它们也不会被触发 -
KeyboardActions(onAny = { <breakpoint> })
也是如此,隐藏不会触发它. - 提供给TextField()的Keyboard选项没有相关选项
- 我不想单独的搜索活动,但无论如何在Manifest中try 了
android:windowSoftInputMode="stateAlwaysVisible"
个.它什么也没做. -
LaunchedEffect(key1 = focusRequester) { keyboardController.show() }
显示键盘,但仍然可以隐藏. -
imm!!.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)
带有活动窗口标志,什么也没做,据我所知,这与作曲无关.
也许更重要的是,我已经累了:(