onKeyEvent 修饰符在 Jetpack Compose 中不起作用
Posted
技术标签:
【中文标题】onKeyEvent 修饰符在 Jetpack Compose 中不起作用【英文标题】:onKeyEvent Modifier doesn't work in Jetpack Compose 【发布时间】:2021-10-21 22:46:20 【问题描述】:return ComposeView(requireContext()).apply
setContent
Box(
Modifier
.onKeyEvent
if (it.isCtrlPressed && it.key == Key.A)
println("Ctrl + A is pressed")
true
else
false
.focusable()
)
为什么在使用平板的硬件键盘时无法在片段中调用按键事件?
【问题讨论】:
【参考方案1】:正如onKeyEvent
的文档所说:
将允许它在它(或其子之一)获得焦点时拦截硬件键事件。
这意味着你需要让你的盒子聚焦,而不仅仅是聚焦。为此,您需要FocusRequester
,在我的示例中,我在视图呈现时询问焦点。在this article查看更多信息
为了以后的注意,如果用户点击文本字段,您的框将失去焦点,但如果此 txt 字段在框内,onKeyEvent
仍然可以工作
看起来空框无法成为焦点,因此您需要使用修饰符添加一些大小。它仍然是不可见的:
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
,这样它就会拉伸,并且不再需要 .size
修饰符
此代码适用于我的蓝牙键盘 + android 智能手机,模拟器似乎无法识别 CTRL
【讨论】:
以上是关于onKeyEvent 修饰符在 Jetpack Compose 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章