Android获取长按按键响应

原创 2013年12月03日 13:39:26

Android获取长按按键响应

Android项目中有不少地方需要对按键的长按操作进行 响应;例如长按物理菜单按键/音量上下按键等。

在Activity以及View中均有一个方法onKeyLongPress();但重载该方法之后,并不能对长按操作进行响应。

onKeyLongPress()方法:

	public boolean onKeyLongPress(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		return super.onKeyLongPress(keyCode, event);
	}

不能正常响应的原因:

onKeyDown()中没有对短按,长按事件进行识别。如要对长按事件进行响应,要在onKeyDown()中添加如下代码:


	  if (event.getRepeatCount() == 0) {
	       	event.startTracking();
	    	isLongPressKey = false;
	  }else{
	       	isLongPressKey = true;
	  }

onKeyDown()代码示例如下:

	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		Log.d(TAG,"---->>onKeyDown():keyCode="+keyCode);
		switch(keyCode){
		     case KeyEvent.KEYCODE_MENU://需要识别长按事件
		     case KeyEvent.KEYCODE_ENTER:
		     case KeyEvent.KEYCODE_DPAD_CENTER: 
       			if (event.getRepeatCount() == 0) {//识别长按短按的代码
       				event.startTracking();
    				isLongPressKey = false;
       			}else{
       				isLongPressKey = true;
       			}
		    	 return true;
		     case KeyEvent.KEYCODE_VOLUME_UP:
		     case KeyEvent.KEYCODE_DPAD_UP: 	    	 

		    	 return true;
		     case KeyEvent.KEYCODE_VOLUME_DOWN:
		     case KeyEvent.KEYCODE_DPAD_DOWN: 

		    	 return true;
		}
		return super.onKeyDown(keyCode, event);
	}

要处理onKeyLongPress和onKeyUp的冲突事件

1、添加变量

	private boolean lockLongPressKey;//是否长按

2、在onKeyLongPress中

	public boolean onKeyLongPress(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		lockLongPressKey = true;
		return super.onKeyLongPress(keyCode, event);
	}

3、在onKeyUp()中要添加冲突处理,如下:

	public boolean onKeyUp(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		Log.d(TAG,"---->> onKeyDown():keyCode="+keyCode);
		switch(keyCode){
		     case KeyEvent.KEYCODE_MENU:
		     case KeyEvent.KEYCODE_ENTER:
		     case KeyEvent.KEYCODE_DPAD_CENTER: 
		 	if(lockLongPressKey){
				lockLongPressKey = false;
				return true;
			}

		    	return true;
		     case KeyEvent.KEYCODE_VOLUME_UP:
		     case KeyEvent.KEYCODE_DPAD_UP: 		    	 

		    	 return true;
		     case KeyEvent.KEYCODE_VOLUME_DOWN:
		     case KeyEvent.KEYCODE_DPAD_DOWN: 

		    	 return true;
		}
		return super.onKeyUp(keyCode, event);
	}


注意问题:

添加长按响应以后要在onKeyUp()中添加长按冲突处理,否则长按事件和UP事件响应会同时起作用。



Android:长按连续响应的Button

Android:长按连续响应的Button。 在电商类app的购物车页面,经常会有这样的需求:长按“+”按钮或者“-”按钮时,购物车中的商品数量连续的增加或减少。...
  • books1958
  • books1958
  • 2015年06月01日 13:10
  • 2423

MFC长按键盘:执行多次、执行一次

先说明一下你按下一个键盘不松开的时候发生了什么:产生了多个按下的消息,切消息的内容都一样,是你按下的那个键。 实现长按的时候执行多次:比如你长按“A”按钮,可以让界面上的某个控件的数值一直增大...
  • ClamReason
  • ClamReason
  • 2015年01月09日 12:50
  • 1708

按键支持连续按的相应代码

2017.12.12 晚上写关于按键的程序时,看到教程上有关于支持按键长按的相关讲解,亲试之后,在这做一个记录吧! 先讲解下支持按键连续按与不支持按键连续按两者之间的区别: 通常我们见到的按键...
  • kaixinbaobei123
  • kaixinbaobei123
  • 2017年12月12日 21:59
  • 48

ppc中长时间点击的响应(长按)

SHRGINFOThis structure sets members for the SHRecognizeGesture function. If a user taps and holds lo...
  • alfiede
  • alfiede
  • 2007年04月17日 13:30
  • 1956

Android 按键长按与短按识别

在Android中已经有了长按与短按的识别,只是长按识别的时间比较短 ,大概在1s以上就认为是长按了。主要的思路是设置一个标志位,利用事件相应次数函数event.getRepeatCount()来设置...
  • zhanghaikuan
  • zhanghaikuan
  • 2016年02月05日 23:50
  • 4146

Android按键长按与短按事件

在有些按键事件中,需要区分长按,与短按的差别。多久属于长按可以自定义,一般默认在1s。 在这个长短按事件中,用到三个方法: onKeyDown()-----处理按下去的事件 onKeyU...
  • yao201606
  • yao201606
  • 2017年04月11日 18:18
  • 1572

android按键的三种响应方式

主要通过三个按键来演示,每个按键用一种实现方法,效果通过Toast观察。 第一种:在布局文件(XML)直接在button控件下添加属性onclick,属性的内容即为按键的响应方法。(方法权限必需为pu...
  • wait7676
  • wait7676
  • 2015年02月04日 21:08
  • 339

VC++中单个键盘按键的响应

关于如何在VC++程序中自定义热键(或称组合键)及其响应,我在之前的知识点(Point1)中已经作了详细的介绍,那么当遇到的是单个键盘按键的响应时,而不是组合键时,我们又该怎么解决呢?我们可以采用af...
  • margin1988
  • margin1988
  • 2014年05月27日 16:36
  • 863

Android入门篇(三)button的点击、长按、“触控”事件

在前面和大家已经提到过了Button的点击事件了,但是大家有没有想过通过一个button实现多种的点击事件呢? 本文将带大家了解button的点击、长按、触控事件。 (一)Button的点击事件 ...
  • systemlsy
  • systemlsy
  • 2017年12月02日 23:36
  • 281

android 中如何监听按键的长按事件

1,key -- 实体按键, 现在手机物理按键越来越少 常见的有 KEYCODE_VOLUME_DOWN/UP KEYCODE_POWER KEYCODE_BACK KEYCODE_HOME KE...
  • fulinwsuafcie
  • fulinwsuafcie
  • 2012年12月20日 18:01
  • 29883
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android获取长按按键响应
举报原因:
原因补充:

(最多只允许输入30个字)