安卓(Android) 监听按键长按事件_Android

1,key -- 实体按键

现在手机物理按键越来越少

 常见的有 KEYCODE_VOLUME_DOWN/UP KEYCODE_POWER KEYCODE_BACK KEYCODE_HOME KEYCODE_MENU

 在一个activity 重载父类 的下面这三个方法来处理按键事件

 public boolean onKeyDown(int keyCode, KeyEvent event):
  public boolean onKeyUp(int keyCode, KeyEvent event):
  public boolean onKeyLongPress(int keyCode, KeyEvent event):

很明显,长按事件一般是放到 onKeyLongPress 函数中来处理的。

那具体是怎么做的呢,下面请看步骤:

第一步,先在 onKeyDown 函数中判断 event.getRepeatCount 的次数(实际上长按就是由一系列的onKeyDown事件触发的).

 

@Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
 case KeyEvent.KEYCODE_VOLUME_DOWN:
 case KeyEvent.KEYCODE_VOLUME_UP:
 if (mCameraAppView.getVisibility() != View.VISIBLE) {
 return false;
 }
 Log.v(TAG,"onKeyDown event.getRepeatCount() "+event.getRepeatCount());
 if (event.getRepeatCount() == 0) {
 event.startTracking();
 return true;
 }
 return true;
 }
 return super.onKeyDown(keyCode, event);
 }
 如果一直按着不放,通过打 log 可以看到
 onKeyDown event.getRepeatCount() 0
 onKeyDown event.getRepeatCount() 1
 onKeyDown event.getRepeatCount() 2
 onKeyDown event.getRepeatCount() 3
 onKeyDown event.getRepeatCount() 4
 onKeyDown event.getRepeatCount() 5
 onKeyDown event.getRepeatCount() 6
 onKeyDown event.getRepeatCount() 7
 onKeyDown event.getRepeatCount() 8
 onKeyDown event.getRepeatCount() 9
 onKeyDown event.getRepeatCount() 10
 onKeyDown event.getRepeatCount() 11
 onKeyDown event.getRepeatCount() 12
 ……

第二步,重载 onKeyLongPressed 函数,在这个函数中你可以添加你的处理

 

@Override
 public boolean onKeyLongPress(int keyCode, KeyEvent event) {
 Log.v(TAG,"key long pressed keyCode = "+keyCode);
 switch (keyCode) {
 case KeyEvent.KEYCODE_VOLUME_UP:
 case KeyEvent.KEYCODE_VOLUME_DOWN:
 Log.v(TAG,"KEYCODE_VOLUME_UP/DOWN long pressed");
 lockLongPressKey = true;
 onShutterButtonLongPressed();
 return true;
 default:
 break;
 }
 return super.onKeyLongPress(keyCode, event);
 }

 第三步,如果在onKeyUp 函数中也处理了相同的按键的话,那么需要对 onKeyLongPress 和 onKeyUp 中该按键的处理作互斥处理了

 public boolean onKeyUp(int keyCode, KeyEvent event) {
 switch (keyCode) {
 case KeyEvent.KEYCODE_VOLUME_UP:
 case KeyEvent.KEYCODE_VOLUME_DOWN:
 Log.v(TAG, "onKeyUp event.getRepeatCount() "+event.getRepeatCount());
 if(lockLongPressKey){
 lockLongPressKey = false;
 return true;
 }
 if (event.getRepeatCount() == 0) {
 Log.v(TAG, "prepare for onShutterButtonClick..");
 if (mEnableRecordBtn && mReviewImage.getVisibility() != View.VISIBLE
 && mBgLearningMessageFrame.getVisibility() == View.GONE) {
 if (mShutterButton != null && mShutterButton.isEnabled()) {
 onShutterButtonFocus(false);
 collapseCameraControls();//fulin@20121101@fix PD1218 B121027-224
 onShutterButtonClick();
 }
 }
 }
 if (mCameraAppView.getVisibility() != View.VISIBLE) {
 return false;
 }
 return true;
 }
 return super.onKeyUp(keyCode, event);
 }

  互斥处理的原因是,长按事件处理完后,松开按键后就会执行 onKeyUp 函数。而这两处针对相同的按键想要实现的功能又不一样

  固在此添加一个 private boolean lockLongPressKey = false; 变量,在 onKeyLongPress 函数中处理过以后,在 onKeyUp中便不再处理。

 2, button

自定义的 button 长按事件则是通过实现 OnLongClickListener 接口来做到的。

import android.app.Activity;
  import android.os.Bundle;
  import android.view.View;
  import android.view.View.OnLongClickListener;
  import android.widget.Button;
  import android.widget.Toast;
  public class MyActivity extends Activity implements OnLongClickListener{
  Button button;//声明按钮的引用
  public void onCreate(Bundle savedInstanceState) {//重写的onCreate方法
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  button = (Button) this.findViewById(R.id.button);//得到按钮的引用
  button.setTextSize(20);
  button.setOnLongClickListener(this);//注册监听
  }
  public boolean onLongClick(View v) {//实现接口中的方法
  if(v == button){//当按下的是按钮时
  Toast.makeText(
  this,
  "长时间按下了按钮",
  Toast.LENGTH_SHORT
  ).show();//显示提示
  }
  return false;
  }
  }

          以上,就是小编对Android 监听按键的长按事件详解,欢迎补充,谢谢支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
android 监听长按事件、android按键长按事件、android监听按键事件、jquery 监听长按事件、js监听长按事件,以便于您获取更多的相关知识。

时间: 2024-08-22 10:22:43

安卓(Android) 监听按键长按事件_Android的相关文章

安卓(Android) 监听按键长按事件

1,key -- 实体按键 现在手机物理按键越来越少 常见的有 KEYCODE_VOLUME_DOWN/UP KEYCODE_POWER KEYCODE_BACK KEYCODE_HOME KEYCODE_MENU 在一个activity 重载父类 的下面这三个方法来处理按键事件 public boolean onKeyDown(int keyCode, KeyEvent event): public boolean onKeyUp(int keyCode, KeyEvent event): p

Android监听电池状态实例代码_Android

如果要监听电池的状态改变,需要动态注册:android.intent.action.BATTERY_CHANGED,收到Action后可以根据对应的Key获取你需要的信息,更详细信息可以参考以下例子中的BatteryChangedReceiver类 具体代码如下所示: package com.example.charginganimation; import android.app.Activity; import android.content.BroadcastReceiver; impor

android监听安装和卸载示例_Android

BroadcastReceiver 是系统全局广播监听类, 其主要方法是onReceive(),自定义的广播类继承于它并实现自己的onReceive()处理逻辑BroadcastReceiver 使用前,需要进行注册监听(xml和代码两种方式),不使用时需要注销监听,其生命周期一般为整个应用的生命周期 1, 自定义广播自定义广播MyInstalledReceiver继承自BroadcastReceiver,实现其onReceive()方式,具体代码如下: 复制代码 代码如下: public cl

Android监听获取应用的安装和卸载事件

Android 应用程序的安装和卸载事件,是由系统进行监听并全局广播的,支 持1.5(android 3)以上 因此,如果想要监听获取应用的安装和卸载事 件,只需要自定义一个BroadcastReceiver,来对系统广播进行监听和处理 BroadcastReceiver 是系统全局广播监听类, 其主要方法是onReceive (),自定义的广播类继承于它并实现自己的onReceive()处理逻辑 BroadcastReceiver 使用前,需要进行注册监听(xml和代码两种方式) ,不使用时需

应用-【安卓初学者】安卓back监听事件怎么让他直接返回到系统主界面

问题描述 [安卓初学者]安卓back监听事件怎么让他直接返回到系统主界面 安卓back监听事件怎么让他直接返回到系统主界面..和home键一样.应用程序继续在后台跑 ...我们老师让我们做一个音乐播放器..按下home键就可以在后台运行...再次打开应用程序的时候进度条和分钟数也显示正常.一直在后台运行并且也更新到界面的.但是按下back键之后界面关闭之后进度条就会有问题..而且单击下一曲的时候会两首歌同时播放. 解决方案 Intent mIntent = new Intent(Intent.A

Android开发-之监听button点击事件的多种方法_Android

 在Android下,事件的发生是在监听器下进行,android系统可以响应按键事件和触摸屏事件,本文主要介绍了button点击事件的方法 一.实现button点击事件的方法 实现button点击事件的监听方法有很多种,这里总结了常用的四种方法: 1.匿名内部类 2.外部类(独立类) 3.实现OnClickListener接口 4.添加XML属性 每一种方法都有它的优点也有它的不足,那么接下来就来详细的讲解这四个实现方法  二.具体实现 1.匿名内部类: 在Android开发中我们会经常看到各种

Android项目类似淘宝 电商 搜索功能,监听软键盘搜索事件,延迟自动搜索,以及时间排序的搜索历史记录的实现_Android

最近跳槽去新公司,接受的第一个任务是在 一个电商模块的搜索功能以及搜索历史记录的实现. 需求和淘宝等电商的功能大体差不多,最上面一个搜索框,下面显示搜索历史记录.在EditText里输入要搜索的关键字后,按软键盘的搜索按键/延迟xxxxms后自动搜索.然后将搜索的内容展示给用户/提示用户没有搜到相关信息. 历史记录是按时间排序的,最新的在前面,输入以前搜索过的关键字,例如牛仔裤(本来是第二条),会更新这条记录的时间,下次再看,牛仔裤的排列就在第一位了.并且有清除历史记录的功能. 整理需求,大致需

封装的android监听手指左右滑动屏幕的事件类分享_Android

左右滑动是智能手机最常用的动作,在此简单的封装了一下,以后直接拿来用就可以了. 简单的只需要几行就可以了,下面那个类是封装好了的. package com.example.test; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.util.Log; import android.widget.RelativeLayout; public c

android监听返回按钮事件的方法_Android

本文实例讲述了android监听返回按钮事件的方法.分享给大家供大家参考.具体如下: 用户在点击手机的返回按钮时,默认是推出当前的activty,但是有时用户不小心按到返回,所以需要给用户一个提示,这就需要重写onkeydown事件,实现的效果如下: java代码如下: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.l