您的位置:首页 > 移动开发 > Android开发

Android获取长按按键响应

2016-06-13 10:49 471 查看
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事件响应会同时起作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: