【问题标题】:onKeyEvent Modifier doesn't work in Jetpack ComposeonKeyEvent 修饰符在 Jetpack Compose 中不起作用
【发布时间】:2023-03-02 22:24:01
【问题描述】:
return ComposeView(requireContext()).apply {
    setContent {
        Box(
            Modifier
                .onKeyEvent {
                    if (it.isCtrlPressed && it.key == Key.A) {
                        println("Ctrl + A is pressed")
                        true
                    } else {
                        false
                    }
                }
                .focusable()
        )
    }
}

为什么在使用平板的硬件键盘时无法在片段中调用按键事件?

【问题讨论】:

    标签: android kotlin android-jetpack-compose


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-13
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 2022-07-29
      • 1970-01-01
      • 2021-05-04
      相关资源
      最近更新 更多