kotlin - Box 不捕获 Compose Desktop 中的关键事件

标签 kotlin android-jetpack-compose compose-desktop

TextField 获得焦点时,会打印按键,但当 Box 本身获得焦点时,不会打印按键。

Box(
    modifier = Modifier.onKeyEvent {
        println(it.key)
        false
    }.fillMaxSize().focusable()
) {
    val fieldValue = remember { mutableStateOf(TextFieldValue("")) }
    TextField(
        value = fieldValue.value,
        onValueChange = { fieldValue.value = it }
    )
}

最佳答案

灵感来自this回答,我更改代码。

当您单击 Box 时,您会将焦点从 TextField 上移除,但不会将其交给 Box。这必须手动完成。

val focusRequester = FocusRequester()

Box(
    modifier = Modifier.onKeyEvent {
        println(it.key)
        false
    }.fillMaxSize()
        .focusRequester(focusRequester)
        .focusable()
        .clickable (
            interactionSource = remember { MutableInteractionSource() },
            indication = null // To disable the ripple effect
        ) {
            focusRequester.requestFocus()
        }
) {
    val fieldValue = remember { mutableStateOf(TextFieldValue("")) }
    TextField(
        value = fieldValue.value,
        onValueChange = { fieldValue.value = it }
    )
}

关于kotlin - Box 不捕获 Compose Desktop 中的关键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68694338/

相关文章:

java - Android:放置多个 fragment 共享的功能的位置

kotlin - Kotlin 中的泛型和内联函数

kotlin - 修改器的属性是什么,我需要更改以使角变圆且宽度更小?喷气背包组合

android-studio - 如何解决java.lang.NoSuchFieldError : No field Companion of type Landroidx/compose/runtime/SlotTable$Companion?

kotlin - 在桌面上使用 Compose 的启动程序在 Linux 上非常滞后

kotlin - 如何在 Jetpack Compose Desktop 中加载字体?

mongodb - Kotlin <--> Mongo 缓存

android - 使 SpannableStringBuilder 的多个部分加粗

android - 如何使用 Jetpack Compose 隐藏 ActionBar

kotlin - Compose 桌面测试 - 如何检查某些内容是否可见?