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中实现按键的长按响应。通过重写onKeyDown()方法并使用startTracking()来识别长按与短按事件。同时,文章还讨论了如何解决onKeyLongPress()与onKeyUp()之间的冲突。
375

被折叠的 条评论
为什么被折叠?



