return ComposeView(requireContext()).apply {
setContent {
Box(
Modifier
.onKeyEvent {
if (it.isCtrlPressed && it.key == Key.A) {
println("Ctrl + A is pressed")
true
} else {
false
}
}
.focusable()
)
}
}
为什么在使用平板电脑的硬件键盘时无法在 fragment 中调用按键事件?
最佳答案
作为 onKeyEvent
的文档说:
will allow it to intercept hardware key events when it (or one of its children) is focused.
这意味着你需要让你的盒子聚焦,而不仅仅是聚焦。为此,您需要一个
FocusRequester
,在我的示例中,我在 View 呈现时询问焦点。在 this article 中查看更多信息对于 future 的注释,如果用户点击文本字段,您的框将失去焦点,但
onKeyEvent
如果这个 txt 字段在框内,仍然可以工作看起来空框无法聚焦,因此您需要使用修饰符添加一些大小。它仍然是不可见的:
val requester = remember { FocusRequester() }
Box(
Modifier
.onKeyEvent {
if (it.isCtrlPressed && it.key == Key.A) {
println("Ctrl + A is pressed")
true
} else {
false
}
}
.focusRequester(requester)
.focusable()
.size(10.dp)
)
LaunchedEffect(Unit) {
requester.requestFocus()
}
或者,只需将内容添加到 Box
所以它会拉伸(stretch)和.size
不再需要修饰符此代码适用于我的蓝牙键盘 + android 智能手机,模拟器似乎无法识别 CTRL
关于android - onKeyEvent 修饰符在 Jetpack Compose 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68861171/