监听按键长按有很多方法,这个是和onkeyDown等并列提供的
一种标准方法,只是直接使用不能起作用,需要一些处理才行。
1.必现在onKeyDown 中将第一次的消息return true;
然后调用event.startTracking();
2.可以在覆写的onKeyLongPress函数中监听到这个按键长按的事件并
做处理。
最初从福州出差期间,我始终不明白这个东西是干什么用的,就在昨天我
关机睡觉的时候才想明白了,关机时的电源键需要长按才起作用,你短按一下
没用的。顿时醒悟,或许我们一会可以用到,请各位同仁珍藏。
谢谢。
附件是这个Demo的工程,操作起来主要是看log。
/**
* 这个Demo是用于监听onKeyLongPress函数的,
* 一般情况下,这个函数是不会被调用的,需要做些特殊
* 处理,才能监听到按键的长按事件,除KEYCODE_ENTER
* 和KEYCODE_DPAD_CENTER之外的按键。不同于view的
* onLongClickListener。
* 应用情景,比如长按一个按键,然后响应事件。
* KeyEvent的Callback回调中,只有这个函数是我们
* 不熟悉且没有使用到的。另外的onKeyDown和onKeyUp和
* onKeyMultiple都是我们常用的,这里不赘述。
* 这里以按键E做测试。
* @author dingran
*
*/
public class LongPressTestActivity extends Activity {
private final String TAG = "dingran.longpress.test.LongPressTestActivity";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
// KEYCODE_ENTER 不行
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.d(TAG, "onKeyDown keyCode = "+keyCode);
// Log.d(TAG, ""+ 1/0);
if(keyCode == KeyEvent.KEYCODE_E && event.getRepeatCount() == 0){
event.startTracking();
return true;
}else{
return false;
}
// return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
Log.d(TAG, "onKeyLongPress keyCode = "+keyCode);
if(keyCode == KeyEvent.KEYCODE_E){
Log.d(TAG, "onKeyLongPress KEYCODE_E");
return true;
}
return super.onKeyLongPress(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
Log.d(TAG, "onKeyUp");
Log.d(TAG, "onKeyUp "+event.getFlags());
int flag = KeyEvent.FLAG_CANCELED | KeyEvent.FLAG_CANCELED_LONG_PRESS;
Log.d(TAG, "onKeyUp flag = "+flag);
if(event.getFlags() == flag){
Log.d(TAG, "onKeyUp in long press up");
}
return super.onKeyUp(keyCode, event);
}
}
分享到:
相关推荐
本文将深入探讨一种基于状态机实现的按键检测机制,该机制能灵活地处理按键的各种事件,并且允许按键的动态添加与删除。 状态机是一种描述系统行为的模型,它通过一系列预定义的状态和状态之间的转移来表示系统的...
STM32是意法半导体(STMicroelectronics)推出的一种基于ARM Cortex-M内核的微控制器系列,它具有高性能、低功耗的特点,广泛应用在嵌入式系统设计中。MultiButton则是指在系统中集成多个物理按键,用于接收用户的...
在编写监听函数,例如`keyboard`函数时,我们可以接收一个事件对象`eve`作为参数。这个对象包含了关于触发事件的具体信息,例如: - `key`属性:表示被按下的键对应的字符。虽然这个属性在现代浏览器中广泛支持,但...
本文针对Android机顶盒在Recovery模式下可能出现的问题,如意外修改或系统损坏导致无法正常升级,提出了一种按键修复Recovery系统的方法。这种方法旨在增强系统的稳定性和可靠性,同时也简化了用户对故障恢复的操作...
`globalShortcut`模块是Electron提供的一种方便的方法,它允许开发者注册全局快捷键,当用户按下这些快捷键组合时,触发相应的事件。下面我们将深入探讨如何使用`globalShortcut`来监听键盘事件并实现快捷键功能。 ...
首先,红外遥控器发送的信号是通过一种编码方式来传输按键信息的,常见的编码格式有NEC、RC5、SIRC等。在本项目中,我们可能需要解码的是NEC编码,因为它是家电遥控器中最常用的格式。NEC编码通常包含一个起始位、...
在JavaScript编程中,实现长按鼠标左键弹出快捷菜单的效果是一种常见的交互设计,它可以提升用户的体验,使得操作更加便捷。这个代码示例是专为前端开发者设计的,旨在帮助他们在网页应用中集成这一功能,并确保兼容...
总结来说,实现长按返回键退出应用的方法主要通过监听并处理按键事件。第一种方法适用于快速退出,而第二种方法则兼顾了提示与退出的双重需求。在实际开发中,应根据应用的具体需求和用户习惯选择合适的方式。
本项目"Android键盘监控源码,检测按键"提供了一种方法来捕获和分析Android设备上的实体键盘输入。下面将详细介绍这个项目及其相关知识点。 一、Android权限与API接口 在Android中,为了监听键盘事件,开发者需要...
智能电视作为一种集互联网、多媒体和通信功能于一体的电视设备,其用户交互方式多样,其中按键操作是最基础且常见的交互手段。处理按键事件不仅包括对物理按键的响应,还包括对遥控器按键、触摸屏按键等虚拟按键的...
在Android开发中,GridView是一种常见的布局管理器,用于展示数据集,通常用于创建网格状的视图。在很多应用中,我们可能需要为GridView的每个条目(Item)添加长按操作来显示额外的功能,例如删除按钮。本教程将...
另一种方法是使用定时器中断。定时器可以设定一个周期性的中断,比如每隔一定时间检查一次按键状态。当检测到按键状态变化时,记录下当前状态。这种方法可以减少因按键检测引起的中断次数,提高系统效率。但是,它的...
51单片机系列是微控制器的一种,具备丰富的GPIO引脚,适合驱动LCD。 Proteus是一款强大的电子设计自动化(EDA)工具,支持硬件仿真和虚拟原型设计。在Proteus中,我们可以建立电路模型并实时运行单片机程序,这对于...
总的来说,`ControlDemo`项目提供了一种在Android应用中处理遥控器键盘输入的范例,尤其是针对多页面场景和连续按键事件的处理。开发者可以从中学到如何利用`KeyEvent`、全局监听、定时器等工具来实现这样的功能,这...
7z是一种高效的文件压缩格式,提供比ZIP更好的压缩率。 【标签】:“004、按键识别.7z”标签与标题一致,再次强调了主题,同时也可能表示这是一个系列教程或文档的一部分,"004"可能是该系列的第四部分。 【压缩...
总的来说,"TestHomeWatcher"作为一个Home键监听的Demo,它提供了一种有效的方式来监听和处理Home键事件,这对于那些需要在用户按下Home键时执行特定操作的应用来说是非常有价值的。但是,这种做法应当谨慎使用,...
首先,我们了解一种常见的误解:通过重写`Activity`的`onKeyDown()`方法来监听Home键。这种方法是无效的,因为系统不会将Home键的事件传递给`onKeyDown()`。示例代码如下: ```java @Override public boolean ...
例如,匿名内部类是一种常见的实现方式: ```java Button button = (Button)findViewById(R.id.my_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ...