Android 回退键监听
回退键(back)监听:
方法1:回调方法onBackPressed
String LOG_TAG="TAG";
@Override
public void onBackPressed() {
// super.onBackPressed();//注释掉这行,back键不退出activity
Log.i(LOG_TAG, "onBackPressed");
}
这个方法可以阻止用户点击后退键来退出程序。
一般的像升级程序或者重要数据传输页面都是要阻止用户轻易退出的。
这个方法也是我们最简单、常用的一个方法。
方法2:回调方法onKeyDown
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.i(LOG_TAG, "onKeyDown: keyCode -- " + keyCode);
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
Log.i(LOG_TAG, "KeyEvent.KEYCODE_BACK");
// break;
return false;//拦截事件
case KeyEvent.KEYCODE_MENU:
Log.i(LOG_TAG, "KeyEvent.KEYCODE_MENU");
break;
case KeyEvent.KEYCODE_HOME:
Log.i(LOG_TAG, "KeyEvent.KEYCODE_HOME");
// 收不到
break;
case KeyEvent.KEYCODE_APP_SWITCH:
Log.i(LOG_TAG, "KeyEvent.KEYCODE_APP_SWITCH");
// 收不到
break;
default:
break;
}
return super.onKeyDown(keyCode, event);
}
这个方法是监听按键事件,但是阻止用户的行为,并且这种方法监听不到Home键的事件。
方法3:回调方法dispatchKeyEvent
这是个事件分发的方法,无论手指按下屏幕或滑动屏幕、离开屏幕都是会触发这个方法
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
Log.i(LOG_TAG, "dispatchKeyEvent: keyCode -- " + event.getKeyCode());
if (event.getKeyCode()==4){//回退键的KeyCode是4.
return false;//表示不分发
}else{
return super.dispatchKeyEvent(event);
}
}
如果事件没有分发(返回false),onBackPressed方法和onKeyDown方法都是没有得到回调的
总结
正常情况肯定是用第一种方法咯。
后面两种方法涉及到事件的分发。
事件分发要彻底理解是一个相当麻烦的过程:包括事件分发、事件拦截、事件处理,并且手指按下、移动、松开都要分析三个事件情况。
上面三个方法中,如果dispatchKeyEvent返回false,后面两个方法是无法得到回调的。
如果onKeyDown返回false,onBackPressed方法是没有得到回调的。
共勉:生活可能迫使你做很多事情,但是自己想做的事情还是要坚持去做。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2018-04-24 java中Math常用方法
2018-04-24 关于View转化成bitmap保存成图片
2018-04-24 Java中Math类的几个四舍五入方法的区别
2017-04-24 java反射详解
2017-04-24 Java反射机制详解
2017-04-24 详解Android插件化开发-资源访问
2017-04-24 android--动态加载、插件化