目录结构:

contents structure [+]

一.简介

本篇文章介绍如何在Android中实现监听返回键,主键,菜单键。一般情况下,我们都可以在Android手机底部看到三个按钮,这三个按钮就分别是返回键,主键,菜单键。

接下来介绍监听这三个键的实现。

二.监听 返回键

第一种方法通过onBackPressed()方法来实现

    /**
* 注意:
* super.onBackPressed()会自动调用finish()方法,关闭当前Activity.
*/
@Override
public void onBackPressed() {
super.onBackPressed();
Toast.makeText(this, "按下了back键 onBackPressed()", Toast.LENGTH_SHORT).show();
}

onBackPressed()提供的功能有限,它这是在退出之前通知onBackPressed()方法,并不能改变用户原来的行为

利用onKeyDown方法,就可以实现

    @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
Toast.makeText(this, "按下了back键 onKeyDown()", Toast.LENGTH_SHORT).show();
return false;
}else {
return super.onKeyDown(keyCode, event);
}
}

onKeyDown方法返回true表示退出,返回false便不退出。

还可以通过跳转来实现退出,

   @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}
return super.onKeyDown(keyCode, event);
}

通过onKeyDown我们可以实现,实现“再按一次返回键退出程序”的功能

private long exitTime = 0;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
if((System.currentTimeMillis()-exitTime) > 2000){
Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
finish();
System.exit(0);
}
return true;
}
return super.onKeyDown(keyCode, event);
}

三.监听 主键(Home键)

监听Home键可以通过onUserLeaveHint()方法来实现,

    @Override
protected void onUserLeaveHint() {
super.onUserLeaveHint();
Toast.makeText(this, "onUserLeaveHint", Toast.LENGTH_SHORT).show();
}

在这个方法中,我们可以观察出,如果onUserLeaveHint方法是不能改变用户的行为的。

四.监听 菜单键

在手机下方的三个键中,最右边的键就是菜单键,通常是用方括号表示的。经过笔者的测试发现,如果轻点一下,那么会跳出菜单界面,如果长点的话,那么会退出程序。这个过程会自动调用onUserLeaveHint方法,也就是主键。

菜单的监听也可以通过onKeyDown()方法来实现

    @Override
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU) {
Toast.makeText(this, "onkeyDown clicked", Toast.LENGTH_SHORT)
.show();
super.openOptionsMenu(); // 调用这个,就可以弹出菜单
}
return true; // 最后,一定要做完以后返回 true,或者在弹出菜单后返回true,其他键返回super,让其他键默认
}

处理上面这样的方法,onOptionsMenuClosed()方法也可以实现。

    @Override
public void onOptionsMenuClosed(Menu menu) {
super.onOptionsMenuClosed(menu);
Toast.makeText(this, "onOptionsMenuClosed clicked", Toast.LENGTH_SHORT)
.show();
}

经过笔者的测试,发生这些方法在高版本中可能出现不兼容的情况,关于菜单可以查看 Android中Menu菜单

【Android】Android实现监听返回键,主键(HOME),菜单键的更多相关文章

  1. android fragment轻松监听返回键/Fragment中的popupwindow响应返回键隐藏

    现在的开发我们基本上都是一个主activity中放多个fragment,点击返回按钮的时候,直接退出主activity,但是我们在fragment中经常会弹出例如popupWindow这样的布局,用户 ...

  2. Android WindowManager 监听返回键及home键

    一.监听home键盘,Android Home键系统负责监听,捕获后系统自动处理.有时候,我们需要监听home键处理自己的逻辑,监听方法如下: /** * 监听home键广播 */ private f ...

  3. Android监听返回键、Home键+再按一次返回键退出应用

    Android监听返回键需重写onKeyDown()方法 Home键keyCode==KeyEvent.KEYCODE_HOME @Override public boolean onKeyDown( ...

  4. Android 如何监听返回键,弹出一个退出对话框

    android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用程序不小心点击退出键而直接退出.自己记录下这个简单的demo,备用. public class BackKeyTest ...

  5. android 监听返回键

    android监听返回键 public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE ...

  6. Android 监听返回键退出程序的两种实现

    1.Android 双击返回键退出程序 思路:用户按下返回键时设定一个定时器来监控是否2秒内实现了退出,如果用户没有接着按返回键,则清除第一次按返回键的效果,使程序还原到第一次按下返回键之前的状态.定 ...

  7. [转]Android 如何监听返回键,弹出一个退出对话框

    本文转自:http://blog.csdn.net/sunnyfans/article/details/8094349 Android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用 ...

  8. Android必知必会-Fragment监听返回键事件

    如果移动端访问不佳,请尝试 Github版<–点击左侧 背景 项目要求用户注册成功后进入修改个人资料的页面,且不允许返回到上一个页面,资料修改完成后结束当前页面,进入APP主页. 由于是使用多个 ...

  9. Android 监听软键盘搜索键

    现在很多的Android应用都有了数据搜索功能,在以往的设计上,会使用搜索框+搜索按钮来实现搜索功能: 现在呢,越来越流行的是,去除搜索按钮,直接监听软键盘搜索键,当用户输入完搜索关键字后,直接点击软 ...

随机推荐

  1. SharePoint 2010/2013: List view Lookup threshold uncovered

    SharePoint with Large lists is common scenario in any Sharepoint deployment. While there are Several ...

  2. OpenGL ES Shading Language中应尽量避免使用循环

      In addition to basic if-then-else statements, it is possible to write for, while, and do-while loo ...

  3. KafkaOffsetMonitor 安装

    KafkaOffsetMonitor 安装   1,下载KafkaOffsetMonitor-assembly-0.2.0.jar 2,启动 步骤1:启动ZK(DN1-DN3节点) zkServer. ...

  4. 微信小程序 - 使用字体图标(阿里云库)

    实现 阿里图库:https://www.iconfont.cn/ CSS3:[attribute*=value] 选择器 步骤 1. 加入购物车 2. 下载代码解压,复制iconfont.css ap ...

  5. HDS Truecopy实现原理及项目的选择-诸多案例

    copy from:http://www.eygle.com/archives/2009/05/hds_truecopy_dataguard.html 诸多案例:http://wenku.baidu. ...

  6. innosetup完整脚本

    #define MyAppName "Somarto"#define MyAppVersion "1.0.0"#define MyAppPublisher &q ...

  7. JERSEY中文翻译(第一章、Getting Started、2.2)

    前言 这是jersey2.2的用户向导,我们会尽力维护它的更新并且也会增加新的章节.当阅读本用户指南的时候,也要参阅Jersey API 文档,额外的信息补充JERSEY的新特性和API 如果你想要为 ...

  8. Android View的事件分发机制

    准备了一阵子,一直想写一篇事件分发的文章总结一下.这个知识点实在是太重要了. 一个应用的布局是丰富的,有TextView,ImageView,Button等.这些子View的外层还有ViewGroup ...

  9. top命令参数

    参数说明 d 指定每两次屏幕信息刷新之间的时间间隔.当然用户可以使用s交互命令来改变之. p 通过指定监控进程ID来仅仅监控某个进程的状态. q该选项将使top没有任何延迟的进行刷新.如果调用程序有超 ...

  10. DWR组件——基于远程过程调用实现Ajax

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6686115.html  一:DWR的用途 DWR(Direct Web Remoting)是一个Web远程调用 ...