在Android系统中用来显示界面的组件(Component)为Activity,也就是说只有重写Activity的onKeyDown方法来监控/拦截/屏蔽系统的返回键(back)、菜单键(Menu)及Home键
1、拦截/屏蔽返回键、菜单键实现代码
1
2
3
4
5
6
7
8
9
10
11
12
|
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) { //监控/拦截/屏蔽返回键
processExit();
return true;
} else if(keyCode == KeyEvent.KEYCODE_MENU) {
//监控/拦截菜单键
} else if(keyCode == KeyEvent.KEYCODE_HOME) {
//由于Home键为系统键,此处不能捕获,需要重写onAttachedToWindow()
}
return super.onKeyDown(keyCode, event);
}
|
2、拦截/屏蔽系统Home键
|
public void onAttachedToWindow() {
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
|
为什么必须重写onAttachedToWindow(),看看下面的代码就知道了
/frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java 1000行附近
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
if (code == KeyEvent.KEYCODE_HOME) {
// If a system window has focus, then it doesn't make sense
// right now to interact with applications.
WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null;
if (attrs != null) {
final int type = attrs.type;
if (type == WindowManager.LayoutParams.TYPE_KEYGUARD
|| type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {
// the "app" is keyguard, so give it the key
return false;
}
final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;
for (int i=0; i<typeCount; i++) {
if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {
// don't do anything, but also don't pass it to the app
return true;
}
}
}
}
|
当然,重写View的onKeyDown也可以实现,但View如果没有获得焦点,那就不能监控/拦截返回键、菜单键和Home键,所有还是重写Activity的onKeyDown方法比较好。
分享到:
相关推荐
主要介绍了 Android onKeyDown监听返回键无效的解决办法的相关资料,需要的朋友可以参考下
本文实例讲述了Android开发实现Fragment监听返回键事件功能的方法。分享给大家供大家参考,具体如下: 前面的文章Android开发教程之Fragment定义、创建与使用方法详细讲述了Fragment的基本概念与用法。这里再来分析...
可以先禁止Home键,再在onKeyDown里处理按键值,点然后在击Home键的时候就把程序关闭,或者随你DIY。 代码如下: @Override public boolean onKeyDown(int keyCode, KeyEvent event){ if(KeyEvent.KEYCODE_HOME==...
将到android中Home键的监听,很多人第一反应时重写相应Activity的onKeyDown()方法,监听当按下的键的keyCode为KEYCODE_HOME时,进行自己的相应的处理。如: @Override public boolean onKeyDown(int keyCode, ...
Android 用户界面之重写onKeyDown方法源码.zip源码资源下载Android 用户界面之重写onKeyDown方法源码.zip源码资源下载
首先是实现连续点击返回键时,我们要重写Activity的onKeyDown方法,以捕捉到按键的点击事件,然后我们应该实现连续点击返回键的效果,在第一次点击的时候出现“再次点击返回键退出”的提示。
Android用户界面之重写onKeyDown方法源码.zip
Android源码——用户界面之重写onKeyDown方法源码_new_60.zip
Android 应用项目开发源码 参考和学习使用
Android编写实现手机中的全屏按钮,整个手机屏幕就是一个大按钮,单击的时候,屏幕会变色,也就是按钮响应了人的操作,如何实现这种按钮呢?下面是代码文件中的一些相关部分代码: public boolean onKeyDown(int ...
主要介绍了Android 跨进程模拟按键(KeyEvent )实例详解的相关资料,类似手机遥控器的需求就可以这么做,需要的朋友可以参考下
Android应用源码开发Demo,主要用于毕业设计学习。
用户界面之重写onKeyDown方法源码.zip
用户可以使用两种级别与你的UI进行交互,一种是activity级别,另一种是view级别。在activity级别,Activity类暴露了一些你可以重写的方法。...onKeyDown onKeyUp onMenuItemSelected onMenuOpened 效果图:
本文实例讲述了Android返回键功能的实现方法。分享给大家供大家参考。具体如下: 在开发android应用时,常常通过按返回键(即keyCode == KeyEvent.KEYCODE_BACK)就能关闭程序,其实大多情况下并没有关闭改应用 我们...
android自带的输入法,在软键盘上实现焦点移动,支持上下左右按键,并支持回车输入,文档以LatinIME为例