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事件响应会同时起作用。
相关文章推荐
- Android安全攻防战,反编译与混淆技术完全解析(上)
- Android应用层View绘制流程与源码分析
- Android中ContentProvider组件详解
- Android中bindService的使用方法
- 解决eclipse中查看android工程代码出现android.jar has no source attachment
- Android Tools 在线更新SDK Manager
- Android入门--返回数据到前一个Activity--startActivityForResult 方法
- Android:两个Fragment在同一个Framelayout上切换显示
- Android——Android Studio导入SlidingMenu类库的方法
- Picasso源码分析(三):快照功能实现和HandlerThread的使用
- Android源码适配器模式---Activity类结构
- Android 中ViewPager 实现banner无限轮播效果
- Android 三轴绘制实时加速度曲线
- Android之开源项目工具库篇
- Android插件化方案调研与实践
- Android报错: can't load transform_config.xml
- Android绘制折线图、柱状图等
- Android 中Timer和TimeTask完成定时任务
- android下m、mm、mmm编译命令的使用
- Android之LocalSocket和LocalServerSocket的使用