在 Flutter 中,我希望使用键盘事件,问题是当我按下向下键时,在 keyDown 和 keyUp 事件上都会发生操作,在代码示例中,代码将在按键时和释放按键时打印单词两次,我希望它只在 keyDown 事件上打印它并忽略 keyUp,以便在按下键并释放它后在控制台中打印一次
谢谢
import 'package:flutter/services.dart'; //<-- needed for the keypress comparisons
FocusNode focusNode = FocusNode(); // <-- still no idea what this is.
@override
Widget build(BuildContext context) {
FocusScope.of(context).requestFocus(focusNode); // <-- yup. magic. no idea.
return Scaffold(
appBar: AppBar(),
body: RawKeyboardListener(
autofocus: true,
focusNode: focusNode, // <-- more magic
onKey: (RawKeyEvent event) {
if (event.data.logicalKey == LogicalKeyboardKey.arrowDown) {
print(down);
}
},
child: GridView.builder(
physics: NeverScrollableScrollPhysics(),
itemCount: 300,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 30),
itemBuilder: …Run Code Online (Sandbox Code Playgroud) 我为运行 Wear OS 的手表编写了一个航海应用程序。航海手表经常被弄湿,因此我禁用了屏幕并使用物理按键(按一次和多次)来导航菜单。到目前为止,一切都很好
我现在正在尝试检测长按物理键(用于紧急人员落水功能),但到目前为止,我无法找到在 Samsung Galaxy Watch 上按住物理键时触发的任何事件4.
谁能建议如何检测 Samsung Galaxy Watch 4 上的长按键操作?
大多数按键检测可以通过重写 onKeyDown() 来完成
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
return if (keyCode == bottomKeyCode) {
// process bottomKeyPress
writeToLog("onKeyDown()")
event.startTracking() // required to enable LongPress (works on TicWatch NOT Samsung)
true
} else
super.onKeyDown(keyCode, event)
}
Run Code Online (Sandbox Code Playgroud)
在 Samsung Galaxy Watch 4 上,短按将触发 onKeyDown() 事件
问题是按住该键时不会触发任何事件。按住该键不会触发onKeyDown或onKeyLongPress。onKeyUp当松开按键时它甚至不会触发!
进一步测试
我也看过dispatchKeyEvent()
override fun dispatchKeyEvent(event: KeyEvent): Boolean …Run Code Online (Sandbox Code Playgroud) 我正在尝试向 React 中的图标添加事件侦听器,但它不起作用。我的代码:
const handleKey = (event) => {
console.log(event);
}
<MdOutlinePause onKeyDown={handleKey} />
Run Code Online (Sandbox Code Playgroud)
我在同一个按钮上还有一个 onClick 处理程序,功能正常,所以我真的很困惑为什么 onKeyDown 不触发。感谢任何人可以提供的帮助!
有没有办法捕获 .Net Maui 中自定义输入控件的按键事件?例如,如果我有这样的课程:
public class MyEntry : Entry
{
}
Run Code Online (Sandbox Code Playgroud)
我想在每次用户输入/聚焦条目时按其关键字上的 Tab 键时执行一个操作。
我有一个处于反应状态的输入框,我已经传递了 focus 属性,以便当有人落在组件上时使输入聚焦。
在Android上,它运行良好,它集中输入并弹出键盘。
在 iOS 上,它效果不佳,它集中输入但不隐式显示键盘。我需要再次单击输入以弹出键盘。
我希望用户一登陆页面,键盘就会显示出来。
这是代码: https: //github.com/ritikbanger/react18-input-otp/blob/main/src/lib/index.jsx
这是相同的代码沙箱: https: //codesandbox.io/s/react18-input-otp-0nxzx7 ?file=/src/App.js
我已尝试以下解决方案但不起作用:
我有一台华硕笔记本电脑(F50SF),我正在玩C++试图拦截多媒体键(下一首音轨,上一首曲目,播放/暂停等),但我无法弄明白如何做到这一点.我试过GetAsyncKeyState(VK_MEDIA_NEXT_TRACK)但无济于事.
我知道这是可能的(并且密钥首先在工作),因为这些密钥在Windows Media Player中可以正常工作.
有任何想法吗?
我一直在C#中创建这个登录表单,我想在用户点击提交或按下回车键后立即"提交"所有数据.
我一直在用KeyEvents测试一下,但迄今为止没有任何工作.
void tbPassword_KeyPress(object sender, KeyPressEventArgs e)
{
MessageBox.Show(e.KeyChar.ToString());
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是为了测试事件是否在第一时间起作用.它工作得很完美,当我按下'd'它显示我'd'当我按'8'时它显示'8'但按下输入没有做任何事情.
所以我虽然这是因为输入并没有真正绑定到一个角色,但它确实显示了退格,它工作得很好,所以让我很困惑为什么它没有注册我的回车键.
所以问题是: 如何记录输入/返回键?为什么它不能正确记录按键现在就像它应该的那样?
注意:我把事件放在文本框中
tbPassword.KeyPress += new KeyPressEventHandler(tbPassword_KeyPress);
Run Code Online (Sandbox Code Playgroud)
因此,当按下输入按钮时,它会触发,而选择文本框(当然是整个时间)可能与执行代码有关.
我知道FocusPanel我可以附加这样的处理程序,但根据我的经验,这个组件表现不佳.所以我想尽可能地避免它.
所以我想知道为什么没有办法在文档上附加键处理程序呢?根据quirksmode.org,它可以跨浏览器工作,所以这不应该是一个问题.
我自己也尝试过编写一些JSNI代码,这对大多数情况都适用.但是,如果有任何其他窗口小部件在文档上侦听与我相同的事件,并且该窗口小部件允许事件传播,我几乎无法对到达文档的事件做任何事情,因为它被标记为已死并且异常将是每当我尝试访问该事件的数据时抛出.
到目前为止,这是我的代码:
public class RichDocument implements HasKeyPressHandlers, HasKeyDownHandlers,
HasKeyUpHandlers, HasClickHandlers {
private static final RichDocument instance = new RichDocument();
public static RichDocument get() {
return instance;
}
private final EventBus eventBus = new SimpleEventBus();
private RichDocument() {
startListening();
}
@Override
public HandlerRegistration addClickHandler(ClickHandler handler) {
return eventBus.addHandler(ClickEvent.getType(), handler);
}
@Override
public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) {
return eventBus.addHandler(KeyDownEvent.getType(), handler);
}
@Override
public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) {
return eventBus.addHandler(KeyPressEvent.getType(), handler);
}
@Override
public HandlerRegistration addKeyUpHandler(KeyUpHandler handler) …Run Code Online (Sandbox Code Playgroud) 我想发送几乎这样的命令:
when keypress=="a" #if entered key is "a"
send {ALT+TAB} # send ALT and TAB simultaneously
sleep(2) #wait for 2 sec
send {"I love my Country",0.1} #send all strings at 0.1 sec wait
key_down("BACKSPACE",1) #hold down backspace key for 1 sec
send{ALT+F4} #send ALT and F4 simultaneously
Run Code Online (Sandbox Code Playgroud)
对于所有或特定应用程序,也是opengl游戏.
我尝试了SendKeys.py,但是没有同时输入的功能,也没有用于发送按住键命令的key_down方法.所有建议将不胜感激.
研究,问题,中年危机
这里和那里有一些关于捕捉播放/暂停事件的问题.该解决方案通常依赖于扩展NSApplication并捕获sendEvent.但是,有两个问题:iTunes打开或某些应用程序之前捕获它(Spotify我在看着你).
该死的你发现了
更多人对使用播放/暂停的iTunes打开感到厌倦,并发布在stackoverflow中.然而,解决方案仍然被spotify击败(并且它依赖于奇怪的白名单).如果我打开示例并按下其中一个mediakeys,则会捕获事件而该解决方案不会.
我如何击败 Spotify并捕获媒体事件?