键盘按下和抬起事件(keydown,keyup)——原创
16lz
2021-01-26
Android 学习自修笔记(一)
键盘按下和抬起事件(keydown ,keyup ) ————将军的Android 自修之途 通常按键的动作分为单击、按下和抬起,但实际上单击并不能算单独的按键事件,因为系统底层(Linux 内核)在按键按下时会发出一个中断,在按键抬起时也会发送一个中断,并没有在按键单击时发中断。其实按键单击就是按键按下和抬起的组合动作,所以窗口事件中并不能捕获按键单击事件,而只能捕获按键按下和抬起事件,分别用onKeyDown 和onKeyUp 方法捕获。 源码实例如下:
public class ActivityEventMain extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout. activity_event_main ); } // 捕获按键按下事件 public boolean onKeyDown( int keycode,KeyEvent event){ // 输出按键代码 Log.d( "onKeyDown:keycode" ,String.valueOf(keycode)); // 输出按键重复次数 Log.d( "onKeyDown:RepeatCount" , String.valueOf(event.getRepeatCount())); // 如果重复次数到了 200(8 秒左右 ) ,显示提示 if (event.getRepeatCount()==200) { Toast.makeText( this , " 已经按一会了,累了吧,该松开了! " , Toast. LENGTH_LONG ).show(); } // 如果按下的是 “ 菜单 ” 按钮,输出日志信息 if (keycode==KeyEvent. KEYCODE_MENU ) { Log.d( "onKeyDown" , "MenuKeyDown" ); } return super .onKeyDown(keycode, event); } // 捕获按键抬起事件 public boolean onKeyUp( int keycode,KeyEvent event) { if (keycode==KeyEvent. KEYCODE_MENU ) { Log.d( "onKeyUp" , "MenuKeyDown" ); } return super .onKeyUp(keycode, event); } } 其中onKeyDown 和onKeyUp 方法的参数和类型完全一样,其中Keycode 表示按下或抬起的按键代码,通过event 参数则可以获得更多的按键信息。其中有一个KeyEvent.getKeyCode 方法与keycode 参数的含义完全一样。如果这两个方法返回true ,表示按键事件已经处理完毕。 注意:处理键盘事件的方法不止一个,这些方法是以一个链表形式组织在一起的,当前方法执行完,会执行下一个方法。如果其中某一个方法返回true ,系统就不会在调用后面的方法处理按键事件了。 使用onkeyDown 和onkeyup 方法捕捉事件应了解如下几点:
(1 )onkeyDown 和onkeyup 方法不能捕捉“Home” 按键 (2 )按键重复次数是指按下按键还没有抬起的期间系统会以一定时间间隔不断发送键盘按下中断,也就是说会不断调用onkeyDown 方法,使用KeyEvent.getRepeatCount 方法可以获取调用onkeyDown 方法的次数,也就是按键重复次数,RepeatCount 从0 开始。如果按键抬起,并再次按下,RepeatCount 会清零。 (3 )所有的物理按键的按下和抬起动作都由onkeyDown 和onkeyup 方法捕获,如果想判断具体按下了哪个按键,可以使用keycode 参数,也可以使用keyEvent.getKeycode 方法。可以直接通过按键编码进行判断,但是最好使用在KeyEvent 类中定义的表示按键编码的常量,所有表示按键编码的常量都以“KEYCODE” 开头。
键盘按下和抬起事件(keydown ,keyup ) ————将军的Android 自修之途 通常按键的动作分为单击、按下和抬起,但实际上单击并不能算单独的按键事件,因为系统底层(Linux 内核)在按键按下时会发出一个中断,在按键抬起时也会发送一个中断,并没有在按键单击时发中断。其实按键单击就是按键按下和抬起的组合动作,所以窗口事件中并不能捕获按键单击事件,而只能捕获按键按下和抬起事件,分别用onKeyDown 和onKeyUp 方法捕获。 源码实例如下:
public class ActivityEventMain extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout. activity_event_main ); } // 捕获按键按下事件 public boolean onKeyDown( int keycode,KeyEvent event){ // 输出按键代码 Log.d( "onKeyDown:keycode" ,String.valueOf(keycode)); // 输出按键重复次数 Log.d( "onKeyDown:RepeatCount" , String.valueOf(event.getRepeatCount())); // 如果重复次数到了 200(8 秒左右 ) ,显示提示 if (event.getRepeatCount()==200) { Toast.makeText( this , " 已经按一会了,累了吧,该松开了! " , Toast. LENGTH_LONG ).show(); } // 如果按下的是 “ 菜单 ” 按钮,输出日志信息 if (keycode==KeyEvent. KEYCODE_MENU ) { Log.d( "onKeyDown" , "MenuKeyDown" ); } return super .onKeyDown(keycode, event); } // 捕获按键抬起事件 public boolean onKeyUp( int keycode,KeyEvent event) { if (keycode==KeyEvent. KEYCODE_MENU ) { Log.d( "onKeyUp" , "MenuKeyDown" ); } return super .onKeyUp(keycode, event); } } 其中onKeyDown 和onKeyUp 方法的参数和类型完全一样,其中Keycode 表示按下或抬起的按键代码,通过event 参数则可以获得更多的按键信息。其中有一个KeyEvent.getKeyCode 方法与keycode 参数的含义完全一样。如果这两个方法返回true ,表示按键事件已经处理完毕。 注意:处理键盘事件的方法不止一个,这些方法是以一个链表形式组织在一起的,当前方法执行完,会执行下一个方法。如果其中某一个方法返回true ,系统就不会在调用后面的方法处理按键事件了。 使用onkeyDown 和onkeyup 方法捕捉事件应了解如下几点:
(1 )onkeyDown 和onkeyup 方法不能捕捉“Home” 按键 (2 )按键重复次数是指按下按键还没有抬起的期间系统会以一定时间间隔不断发送键盘按下中断,也就是说会不断调用onkeyDown 方法,使用KeyEvent.getRepeatCount 方法可以获取调用onkeyDown 方法的次数,也就是按键重复次数,RepeatCount 从0 开始。如果按键抬起,并再次按下,RepeatCount 会清零。 (3 )所有的物理按键的按下和抬起动作都由onkeyDown 和onkeyup 方法捕获,如果想判断具体按下了哪个按键,可以使用keycode 参数,也可以使用keyEvent.getKeycode 方法。可以直接通过按键编码进行判断,但是最好使用在KeyEvent 类中定义的表示按键编码的常量,所有表示按键编码的常量都以“KEYCODE” 开头。
更多相关文章
- 初识Android有感
- Android串口开发初体验(windows开发环境)
- Android音频采集
- Android自定义控件系列案例【二】
- 基于 Android(安卓)NDK 的学习之旅-----Java 调用C
- Android中的.9.png图形的机制及制作和使用方法
- Android用AsyncTask来下载图片及用AsyncTask的好处
- Android(安卓)如何获取应用签名,微信需要的签名是MD5还是SHA1?
- 当你说不行时,你应该说些什么:以Android播放midi为例