如何在 Kotlin Desktop Compose 中触发 PC 键盘输入

2023-11-29

我将使用 Kotlin Jetpack Compose 开发一个 POS 系统,我想知道如何在我的项目中触发键盘输入事件。


在 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不再需要修改器

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Kotlin Desktop Compose 中触发 PC 键盘输入 的相关文章

随机推荐

  • 将选定的列保留为 DataFrame 而不是 Series

    从 pandas DataFrame 中选择单个列时 例如df iloc 0 df A or df A等 生成的向量会自动转换为 Series 而不是单列 DataFrame 但是 我正在编写一些将 DataFrame 作为输入参数的函数
  • 比较两个 numpy 数组的对象 ID

    我一直在使用numpy很长一段时间 但我偶然发现了一件我不完全理解的事情 a np ones 20 b np zeros 10 print id a id b prints False print id a id b prints 4591
  • 如何使用 Python 列出远程主机目录中的文件? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我需要从 a 获取文件列表远程主机目录 在我的本地计算机上运行代码 是类似的东西os listdir at 远程主机 不是os lisdir 在运行 python 代码的本地计算
  • MySQL - 使用 JOIN 和 WHERE 确定平均小时数

    我正在使用 MySQL 学习下一个科技课程这依赖于以下架构 我当前的任务是找出一个特定项目的平均工作时间 这些时间位于项目 员工数据库 而项目名称 Washington Avenue Barber 位于projects数据库 我尝试使用如下
  • 通过 C# 应用程序测试网站是否处于活动状态

    我正在寻找通过 C 应用程序测试网站是否活跃的最佳方法 背景 我的应用程序包括Winform用户界面 一个后端WCF服务 and a website将内容发布给 UI 和其他使用者 为了防止由于缺少 WCF 服务或网站关闭而导致 UI 启动
  • 如何(简单地)从java生成POST http请求来进行文件上传

    我想使用 POST http 事件从 java 应用程序 小程序上传文件 我想避免使用 SE 中未包含的任何库 除非没有其他 可行 选项 到目前为止 我只提出了非常简单的解决方案 创建字符串 缓冲区 并用兼容的标头填充它 http www
  • Jqplot 的 IE8 打印问题

    我正在使用 IE8 测试 jqplot 当我尝试打印时 轴标签发生偏移 我使用 Andrew Bullock 的 Canvashack 作为解决方法 http blog muonlab com 2010 06 02 getting posi
  • Apache Beam:固定窗口触发器

    根据下列的文档中指出 如果您没有明确指定触发器 您会得到如下所述的行为 如果未指定 默认行为是在以下情况下首先触发 水印经过窗口末尾 然后每隔一段时间再次触发 时间有迟到的数据 对于固定窗口来说 这种行为也成立吗 例如 您假设固定窗口应该有
  • Flutter web:打开直接 URL 导航在本地工作但在部署后不起作用

    I am trying to implement Flutter web url navigation in my application When I am trying to open http localhost 7357 priva
  • 将效果应用于 iPhone 相机预览“视频”

    我的目标是编写一个自定义相机视图控制器 可以使用后置摄像头和前置摄像头 如果有 以所有四个界面方向拍照 正确旋转和缩放预览 视频 以及全分辨率照片 允许将 简单 效果应用于预览 视频 和全分辨率照片 实现 在 iOS 4 2 Xcode 3
  • 生成器可以递归吗?

    我天真地尝试创建一个递归生成器 没用 这就是我所做的 def recursive generator lis yield lis 0 recursive generator lis 1 for k in recursive generato
  • top_n 函数返回的行数超出预期

    我对 r 很陌生 而且很累 我想我的大脑当前无法正常工作 但对我来说 下面的代码应该只返回 10 行 它返回 66 这是为什么 library dplyr a lt structure list calls in range c 17 14
  • Nginx - 使用/子文件夹重定向反向代理 Ghost 博客

    我有一个正在运行的 nginx 实例 其规则如下 但我很难将所有请求指向domain com ghost 我尝试修改location 阻止到location ghost 但没有成功 我刚刚从 Ghost 应用程序中收到 404 错误 有什么
  • IOS:无需 iphone/ipad 邮件应用程序即可发送邮件

    我想创建一个有 5 个文本字段和一个 textView 的应用程序 1 Name 2 Surname 3 Telephone 4 your email user email not address email receiver 5 city
  • jQuery 获取带有 id 的单击单元格的表头名称

    我有一个表 在该表中我有值id edit 现在 我想要的是当我单击任何单元格时获取相应列的标题名称 到目前为止 根据之前提出的问题 我得到的是 body on click td edit function var th this close
  • Javascript 正则表达式只允许正数

    我用它来测试数字 d 但我需要确保它大于零 同时仍然允许 0000123123123 例如 你可以写 d 1 9 d 零个或多个数字 后跟一个非零数字 再后跟零个或多个数字
  • 按比例调整图像大小

    我想将上传的图像调整为宽度 180px 高度成比例 有没有任何课程可以做到这一点 感谢帮助 我认为这个问题可以用实际的代码示例来回答 下面的代码向您展示了如何调整目录中图像的大小uploaded 并将调整大小的图像保存在文件夹中resize
  • iphone 平铺图像

    我有一个 1280 x 1664 的图像 我想使用 Apple 提供的 ScrollViewSuite 示例 但我需要将此图像剪切到多个缩放级别 那么 有人知道如何在多个缩放级别上平铺图像吗 一定有一种简单的方法可以将图像填充到 256x2
  • 处理交易时虚拟机异常:气体耗尽

    我正在使用 testrpc web3 1 0 和 Solidity 构建一个简单的 Dapp 但我总是收到此错误 并且找不到问题所在 请帮忙 我的 JavaScript 文件 const Web3 require web3 const fs
  • 如何在 Kotlin Desktop Compose 中触发 PC 键盘输入

    我将使用 Kotlin Jetpack Compose 开发一个 POS 系统 我想知道如何在我的项目中触发键盘输入事件 在 Compose Desktop 中 您可以使用以下方式侦听关键事件onKeyEvent Window范围 Wind