As documentation of onKeyEvent
says:
will allow it to intercept hardware key events when it (or one of its children) is focused.
Which means you need to make your box focused, not just focusable. To do this you need a FocusRequester
, in my example I'm asking focus when view renders. Check out more in this article
For the future note, that if user taps on a text field, your box will loose focus, but onKeyEvent
still gonna work if this txt field is inside the box
Looks like empty box cannot become focused, so you need to add some size with a modifier. It still will be invisible:
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()
}
Alternatively just add content to Box
so it will stretch and .size
modifier won't be needed anymore
This code works fine with my Bluetooth keyboard + android smartphone, emulator seems not recognizing CTRL
LaunchedEffect(Unit) { focusRequester.requestFocus() focusRequester.freeFocus() focusRequester.captureFocus() }
– Knickerbocker