onKeyDown 方法一点归纳

1onKeyDown 方法是接口 KeyEvent.Callback 中的抽象方法,已知的view activity ,layout 等都实现并重写了这个方法用来捕捉我们对手机按键的操作。

2:参数keyCode ,这个参数是指我们手机键盘中的键盘码,我们手机中的按键都有对应着的键盘码,包括电源键,音量的+ ,- ,home 键等等。我们的返回键 的键盘码就是4。我们可以通过判断返回的key code 是什么数值来判断用户按下的是什么按键。

3:当用户按下按键时,系统会自动将事件封装成KeyEvent对象供应用程序使用。 按键事件KeyEvent   按键事件有多种常量类型,比如 KEYCODE_BACK ,

4:返回值,onKeyDown 方法的返回值是一个boolean,一开始我以为这个是跟view 的事件分发是一个道理的,返回true 事件由当前的activity 或者view 的onKeyDown()方法来处理,返回false 由上一级来处理,但是我测试了一下,发现不管返回ture 还是false ,如果在当前界面继续点击 返回键, onKeyDown()  方法依旧会捕获到。只有在返回super.onKeyDown(keyCode, event) 时,才会由当前activity 或者view 的父级来处理。然后再网上查资料接触到一个信息,是当返回true 的时候,之后你按了某些按键,比如keyCode  为82 的KEYCODE_MENU ,你就无法再接收到。

(这个只是我当时随便测了一下,所以仅仅供大家参考吧,但是返回false 就说事件不吃掉,让其他来处理,这个概论是觉得有疑问的。)

5:点击两次进行关闭的功能

private long clickTime=0;
 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (SystemClock.uptimeMillis() - clickTime <= 1500) {
                //如果两次的时间差<1s,就不执行操作

            } else {
                //当前系统时间的毫秒值
                clickTime = SystemClock.uptimeMillis();
                Toast.makeText(MainUI.this, "再次点击退出", Toast.LENGTH_SHORT).show();
                return false;
            }
        }
        return super.onKeyDown(keyCode, event);
    }
——————————————————————————————>
 private long clickTime=0;
 @Override  
        public boolean onKeyDown(int keyCode, KeyEvent event) {  
            if (keyCode == KeyEvent.KEYCODE_BACK) {  
                exit();  
                return true;  
            }  
            return super.onKeyDown(keyCode, event);  
        }  
      
        private void exit() {  
            if ((System.currentTimeMillis() - clickTime) > 2000) {  
                Toast.makeText(getApplicationContext(), "再次点击退出",  Toast.LENGTH_SHORT).show();  
                clickTime = System.currentTimeMillis();  
            } else {  
                Log.e(TAG, "exit application");  
                this.finish();  
                System.exit(0);  
            }  

        }  

实现的基本原理就是,当按下BACK键时,会被onKeyDown捕获,判断是BACK键,则执行exit方法。

判断用户两次按键的时间差是否在一个预期值之内,是的话直接直接退出,不是的话提示用户再按一次后退键退出。我们可以在这里进行一些操作,比如关闭掉所有缓存 的activity,或者将登陆状态改为下线等操作。

6:onBackPressed()

当活动检测到用户按下后退键时调用这个方法,这个方法是底层 activity 中的一个方法,他最终会调用activity 的finish() 方法用来关闭activity 。

7:键值对照表

KEYCODE列表
电话键
键名 描述 键值

    KEYCODE_CALL 拨号键5
    KEYCODE_ENDCALL 挂机键6
    KEYCODE_HOME 按键Home3
    KEYCODE_MENU 菜单键82
    KEYCODE_BACK 返回键4
    KEYCODE_SEARCH 搜索键84
    KEYCODE_CAMERA 拍照键27
    KEYCODE_FOCUS 拍照对焦键80
    KEYCODE_POWER 电源键26
    KEYCODE_NOTIFICATION 通知键83
    KEYCODE_MUTE 话筒静音键91
    KEYCODE_VOLUME_MUTE 扬声器静音键164
    KEYCODE_VOLUME_UP 音量增加键24
    KEYCODE_VOLUME_DOWN 音量减小键25

控制键
键名 描述 键值

    KEYCODE_ENTER 回车键66
    KEYCODE_ESCAPE ESC键111
    KEYCODE_DPAD_CENTER 导航键 确定键23
    KEYCODE_DPAD_UP 导航键 向上19
    KEYCODE_DPAD_DOWN 导航键 向下20
    KEYCODE_DPAD_LEFT 导航键 向左21
    KEYCODE_DPAD_RIGHT 导航键 向右22
    KEYCODE_MOVE_HOME 光标移动到开始键122
    KEYCODE_MOVE_END 光标移动到末尾键123
    KEYCODE_PAGE_UP 向上翻页键92
    KEYCODE_PAGE_DOWN 向下翻页键93
    KEYCODE_DEL 退格键67
    KEYCODE_FORWARD_DEL 删除键112
    KEYCODE_INSERT 插入键124
    KEYCODE_TAB Tab键61
    KEYCODE_NUM_LOCK 小键盘锁143
    KEYCODE_CAPS_LOCK 大写锁定键115
    KEYCODE_BREAK Break/Pause键121
    KEYCODE_SCROLL_LOCK 滚动锁定键116
    KEYCODE_ZOOM_IN 放大键168
    KEYCODE_ZOOM_OUT 缩小键169

组合键
键名 描述

    KEYCODE_ALT_LEFT Alt+Left
    KEYCODE_ALT_RIGHT Alt+Right
    KEYCODE_CTRL_LEFT Control+Left
    KEYCODE_CTRL_RIGHT Control+Right
    KEYCODE_SHIFT_LEFT Shift+Left
    KEYCODE_SHIFT_RIGHT Shift+Right

基本
键名 描述 键值

    KEYCODE_0 按键'0'7
    KEYCODE_1 按键'1'8
    KEYCODE_2 按键'2'9
    KEYCODE_3 按键'3'10
    KEYCODE_4 按键'4'11
    KEYCODE_5 按键'5'12
    KEYCODE_6 按键'6'13
    KEYCODE_7 按键'7'14
    KEYCODE_8 按键'8'15
    KEYCODE_9 按键'9'16
    KEYCODE_A 按键'A'29
    KEYCODE_B 按键'B'30
    KEYCODE_C 按键'C'31
    KEYCODE_D 按键'D'32
    KEYCODE_E 按键'E'33
    KEYCODE_F 按键'F'34
    KEYCODE_G 按键'G'35
    KEYCODE_H 按键'H'36
    KEYCODE_I 按键'I'37
    KEYCODE_J 按键'J'38
    KEYCODE_K 按键'K'39
    KEYCODE_L 按键'L'40
    KEYCODE_M 按键'M'41
    KEYCODE_N 按键'N'42
    KEYCODE_O 按键'O'43
    KEYCODE_P 按键'P'44
    KEYCODE_Q 按键'Q'45
    KEYCODE_R 按键'R'46
    KEYCODE_S 按键'S'47
    KEYCODE_T 按键'T'48
    KEYCODE_U 按键'U'49
    KEYCODE_V 按键'V'50
    KEYCODE_W 按键'W'51
    KEYCODE_X 按键'X'52
    KEYCODE_Y 按键'Y'53
    KEYCODE_Z 按键'Z'54

符号
键名 描述

    KEYCODE_PLUS 按键'+'
    KEYCODE_MINUS 按键'-'
    KEYCODE_STAR 按键'*'
    KEYCODE_SLASH 按键'/'
    KEYCODE_EQUALS 按键'='
    KEYCODE_AT 按键'@'
    KEYCODE_POUND 按键'#'
    KEYCODE_APOSTROPHE 按键''' (单引号)
    KEYCODE_BACKSLASH 按键'\'
    KEYCODE_COMMA 按键','
    KEYCODE_PERIOD 按键'.'
    KEYCODE_LEFT_BRACKET 按键'['
    KEYCODE_RIGHT_BRACKET 按键']'
    KEYCODE_SEMICOLON 按键';'
    KEYCODE_GRAVE 按键'`'
    KEYCODE_SPACE 空格键

小键盘
键名 描述

    KEYCODE_NUMPAD_0 小键盘按键'0'
    KEYCODE_NUMPAD_1 小键盘按键'1'
    KEYCODE_NUMPAD_2 小键盘按键'2'
    KEYCODE_NUMPAD_3 小键盘按键'3'
    KEYCODE_NUMPAD_4 小键盘按键'4'
    KEYCODE_NUMPAD_5 小键盘按键'5'
    KEYCODE_NUMPAD_6 小键盘按键'6'
    KEYCODE_NUMPAD_7 小键盘按键'7'
    KEYCODE_NUMPAD_8 小键盘按键'8'
    KEYCODE_NUMPAD_9 小键盘按键'9'
    KEYCODE_NUMPAD_ADD 小键盘按键'+'
    KEYCODE_NUMPAD_SUBTRACT 小键盘按键'-'
    KEYCODE_NUMPAD_MULTIPLY 小键盘按键'*'
    KEYCODE_NUMPAD_DIVIDE 小键盘按键'/'
    KEYCODE_NUMPAD_EQUALS 小键盘按键'='
    KEYCODE_NUMPAD_COMMA 小键盘按键','
    KEYCODE_NUMPAD_DOT 小键盘按键'.'
    KEYCODE_NUMPAD_LEFT_PAREN 小键盘按键'('
    KEYCODE_NUMPAD_RIGHT_PAREN 小键盘按键')'
    KEYCODE_NUMPAD_ENTER 小键盘按键回车

功能键
键名 描述

    KEYCODE_F1 按键F1
    KEYCODE_F2 按键F2
    KEYCODE_F3 按键F3
    KEYCODE_F4 按键F4
    KEYCODE_F5 按键F5
    KEYCODE_F6 按键F6
    KEYCODE_F7 按键F7
    KEYCODE_F8 按键F8
    KEYCODE_F9 按键F9
    KEYCODE_F10 按键F10
    KEYCODE_F11 按键F11
    KEYCODE_F12 按键F12

多媒体键
键名 描述

    KEYCODE_MEDIA_PLAY 多媒体键 播放
    KEYCODE_MEDIA_STOP 多媒体键 停止
    KEYCODE_MEDIA_PAUSE 多媒体键 暂停
    KEYCODE_MEDIA_PLAY_PAUSE 多媒体键 播放/暂停
    KEYCODE_MEDIA_FAST_FORWARD 多媒体键 快进
    KEYCODE_MEDIA_REWIND 多媒体键 快退
    KEYCODE_MEDIA_NEXT 多媒体键 下一首
    KEYCODE_MEDIA_PREVIOUS 多媒体键 上一首
    KEYCODE_MEDIA_CLOSE 多媒体键 关闭
    KEYCODE_MEDIA_EJECT 多媒体键 弹出
    KEYCODE_MEDIA_RECORD 多媒体键 录音

手柄按键
键名 描述

    KEYCODE_BUTTON_1 通用游戏手柄按钮 #1
    KEYCODE_BUTTON_2 通用游戏手柄按钮 #2
    KEYCODE_BUTTON_3 通用游戏手柄按钮 #3
    KEYCODE_BUTTON_4 通用游戏手柄按钮 #4
    KEYCODE_BUTTON_5 通用游戏手柄按钮 #5
    KEYCODE_BUTTON_6 通用游戏手柄按钮 #6
    KEYCODE_BUTTON_7 通用游戏手柄按钮 #7
    KEYCODE_BUTTON_8 通用游戏手柄按钮 #8
    KEYCODE_BUTTON_9 通用游戏手柄按钮 #9
    KEYCODE_BUTTON_10 通用游戏手柄按钮 #10
    KEYCODE_BUTTON_11 通用游戏手柄按钮 #11
    KEYCODE_BUTTON_12 通用游戏手柄按钮 #12
    KEYCODE_BUTTON_13 通用游戏手柄按钮 #13
    KEYCODE_BUTTON_14 通用游戏手柄按钮 #14
    KEYCODE_BUTTON_15 通用游戏手柄按钮 #15
    KEYCODE_BUTTON_16 通用游戏手柄按钮 #16
    KEYCODE_BUTTON_A 游戏手柄按钮 A
    KEYCODE_BUTTON_B 游戏手柄按钮 B
    KEYCODE_BUTTON_C 游戏手柄按钮 C
    KEYCODE_BUTTON_X 游戏手柄按钮 X
    KEYCODE_BUTTON_Y 游戏手柄按钮 Y
    KEYCODE_BUTTON_Z 游戏手柄按钮 Z
    KEYCODE_BUTTON_L1 游戏手柄按钮 L1
    KEYCODE_BUTTON_L2 游戏手柄按钮 L2
    KEYCODE_BUTTON_R1 游戏手柄按钮 R1
    KEYCODE_BUTTON_R2 游戏手柄按钮 R2
    KEYCODE_BUTTON_MODE 游戏手柄按钮 Mode
    KEYCODE_BUTTON_SELECT 游戏手柄按钮 Select
    KEYCODE_BUTTON_START 游戏手柄按钮 Start
    KEYCODE_BUTTON_THUMBL Left Thumb Button
    KEYCODE_BUTTON_THUMBR Right Thumb Button

待查
 
键名 描述

    KEYCODE_NUM 按键Number modifier
    KEYCODE_INFO 按键Info
    KEYCODE_APP_SWITCH 按键App switch
    KEYCODE_BOOKMARK 按键Bookmark
    KEYCODE_AVR_INPUT 按键A/V Receiver input
    KEYCODE_AVR_POWER 按键A/V Receiver power
    KEYCODE_CAPTIONS 按键Toggle captions
    KEYCODE_CHANNEL_DOWN 按键Channel down
    KEYCODE_CHANNEL_UP 按键Channel up
    KEYCODE_CLEAR 按键Clear
    KEYCODE_DVR 按键DVR
    KEYCODE_ENVELOPE 按键Envelope special function
    KEYCODE_EXPLORER 按键Explorer special function
    KEYCODE_FORWARD 按键Forward
    KEYCODE_FORWARD_DEL 按键Forward Delete
    KEYCODE_FUNCTION 按键Function modifier
    KEYCODE_GUIDE 按键Guide
    KEYCODE_HEADSETHOOK 按键Headset Hook
    KEYCODE_META_LEFT 按键Left Meta modifier
    KEYCODE_META_RIGHT 按键Right Meta modifier
    KEYCODE_PICTSYMBOLS 按键Picture Symbols modifier
    KEYCODE_PROG_BLUE 按键Blue “programmable”
    KEYCODE_PROG_GREEN 按键Green “programmable”
    KEYCODE_PROG_RED 按键Red “programmable”
    KEYCODE_PROG_YELLOW 按键Yellow “programmable”
    KEYCODE_SETTINGS 按键Settings
    KEYCODE_SOFT_LEFT 按键Soft Left
    KEYCODE_SOFT_RIGHT 按键Soft Right
    KEYCODE_STB_INPUT 按键Set-top-box input
    KEYCODE_STB_POWER 按键Set-top-box power
    KEYCODE_SWITCH_CHARSET 按键Switch Charset modifier
    KEYCODE_SYM 按键Symbol modifier
    KEYCODE_SYSRQ 按键System Request / Print Screen
    KEYCODE_TV 按键TV
    KEYCODE_TV_INPUT 按键TV input
    KEYCODE_TV_POWER 按键TV power
    KEYCODE_WINDOW 按键Window

    KEYCODE_UNKNOWN 未知按键


参考了:

https://blog.csdn.net/chenrushui/article/details/51249836

https://blog.csdn.net/u012839224/article/details/37764193

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值