在 Compose Desktop 中,您可以使用以下方式侦听关键事件onKeyEvent
Window
范围:
Window(
onCloseRequest = ::exitApplication,
visible = visible,
onKeyEvent = {
if (it.isCtrlPressed && it.key == Key.A) {
println("Ctrl + A is pressed")
true
} else {
// let other handlers receive this event
false
}
}
) {
App()
}
另一种选项也适用于 Android 中的 Compose,即使用修改器.onKeyEvent。正如文档所说:
将允许它在它(或其子级之一)聚焦时拦截硬件按键事件。
因此,您需要使一项或其子项之一成为可聚焦且集中的。查看有关撰写中的焦点的更多信息本文
为此,您需要一个FocusRequester
,在我的示例中,我在使用视图渲染时询问焦点LaunchedEffect
.
对于未来的注释,如果用户点击文本字段,或其他可聚焦元素将获得焦点,您的视图将失去焦点。如果此聚焦视图在您的视图内onKeyEvent
处理程序,它仍然可以工作。
空框无法获得焦点,因此您需要使用修饰符添加一些大小。它仍然是不可见的:
val requester = remember { FocusRequester() }
Box(
Modifier
.onKeyEvent {
if (it.isCtrlPressed && it.key == Key.A) {
println("Ctrl + A is pressed")
true
} else {
// let other handlers receive this event
false
}
}
.focusRequester(requester)
.focusable()
.size(10.dp)
)
LaunchedEffect(Unit) {
requester.requestFocus()
}
或者只需将内容添加到Box
所以它会拉伸.size
不再需要修改器