1:onKeyDown 方法是接口 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

onKeyDown 方法一点归纳相关推荐

  1. android onkeydown继承,onKeyDown方法中的返回值

    今天调了一个非常蛋疼的bug,花了差不多一个小时的时间,在应用内的某个activity中不能使用设备的音量调节按钮调节音量,开始以为是因为window的某些flag导致的,试了试,貌似没有影响,后来又 ...

  2. linux磁盘信息文件,Linux查看硬盘信息方法总结归纳

    Linux查看硬盘信息方法总结归纳 lsblk lsblk命令用来查看接入到系统中的块设备,默认输出分区.大小.挂载点等信息,一目了然: tlanyan@node1:~$ lsblk sda 8:0 ...

  3. 关于onKeyDown方法

    onKeyDown方法简介 首先介绍的是onKeyDown方法,该方法是接口KeyEvent.Callback中的抽象方法,所有的View全部实现了该接口并重写了该方法,该方法用来捕捉手机键盘被按下的 ...

  4. onKeyDown方法笔记

    onKeyDown()⽅法详解 onKeyDown()⽅法详解 当Android设备上的物理按键被按下的时候,程序会回调onKeyDown()⽅法,该⽅法是接⼝KeyEvent.Callback中的抽 ...

  5. eclipse报unknown database错误的其中一种方法解决归纳

    今天我们分享的是unknown database 错误,如果是在用eclipse做项目的,或者是在学开发的同学在用这工具时应该都知道,这个eclipse每一次报错是都有一大堆的错误报错出来,其实最近, ...

  6. 求素数的方法完整归纳,学的不仅是“求素数”!

    一.相关概念 定义:素数(Prime Number)又称质数,是指大于1且只能被1和它本身整除的正整数,例如2,3,5,7,11等. 与素数相对的就是合数,它能被一个本身之外的数整除,例如4,6,8, ...

  7. 关于HBITMAP,CBITMAP,BITMAP的转换以及图像显示的一点归纳

    OK,在上一篇文章中我提到了VC6和VS的差别,在VC6中我们只能依赖于CBITMAP HBITMAP以及BITMAP之间的转化关系,而在VS中,我们用CIMAGE类就可以全部搞定,那么究竟这三个类之 ...

  8. Home键的获取监听,安卓4.0后就不能在onkeydown方法中获取了。怎么办。

    Android下得到Home键按下的消息 在Android下,并不能通过onKeyDown这样的事件来截获Home键的消息,其原因在Android的文档中已经明确的说过了 public static ...

  9. 数据挖掘导论 复习一(介绍+数据预处理方法+定性归纳)

    数据挖掘=数据库+机器学习 算法 经验 模型 机器学习任务:分类.回归.聚类(KMeans.DCSAN.层次聚类).数据降维.数据预处理 常用分类器:KNN.贝叶斯. 逻辑回归 .决策树.随机森林 本 ...

最新文章

  1. java8 时间加一秒_年货买瓜子有讲究!这些加了“料”的瓜子不安全!
  2. 任务队列,消息队列和rpc的区别是什么?
  3. SQL SERVER2008 镜像
  4. 用php生成html文件,怎样用PHP生成html文件
  5. 川大网教计算机文化基础考试题,川大网教计算机文化基础第一次作业统一标准答案.doc...
  6. asp.net webapi 自托管插件式服务(转)
  7. 外挂学习之路(8)--- 释放技能call
  8. redis desktop manager_面试官:Redis分布式锁如何解决锁超时问题?
  9. C/C++ select fd_set解释
  10. es客户端工具_超越 Cookie:当今的客户端数据存储
  11. python读取txt文件中的数字_在python中从文本文件读取两列数字
  12. 通过YAJL生成json语句
  13. PC电脑控制手机iphone(iOS 11、iOS 12、iOS 13),需越狱
  14. Bootcamp提示该USB驱动器无法使用
  15. 红贝应用架构配置式应用开发示例
  16. linux捕获鼠标点击事件文件,Linux捕捉鼠标事件和键盘事件的方法
  17. 浅谈聚合支付系统的安全性
  18. 高校教室多媒体设备报修管理系统
  19. 写字机结构---coreXY结构
  20. centos下中文字体文件的位置

热门文章

  1. 古币杂谈:清十二帝之 清太宗 爱新觉罗·皇太极
  2. CSS * *:before, *:after
  3. PS插件CameraRaw-HSL色彩模式
  4. LTE中的RRC层(上篇)
  5. 神经网络中如何确定隐藏层的层数和大小
  6. 嘉泰智能受邀出席2020广东省制造业高质量发展论坛暨制造强省建设院士专家咨询会
  7. 将2019-02-14 转化为 格林尼治时间
  8. mysql统计数据库中表的行数统计
  9. Git 中出现.wsp文件且无法删除情况
  10. 图像检索:Spreading Vectors for Similarity Search