键盘按下和抬起事件(keydown,keyup)——原创

           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” 开头。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值