在Android开发中,常常会遇到某个Activity中要求改变后退键的操作逻辑,例如,需要连续按两下才能退出当前Activity等。这种情形中,我们通常的做法有两个:①重写Activity中的onKeyDown方法 ②重写Activity中的onBackPressed方法。onKeyDown方法会在用户按下按键后回调,可根据keyCode来判断用户是否按下回退键,加以判断;onBackPressed则是直接在用户按下回退键时调用。通常会有如下代码:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    //按下的如果是BACK,同时没有重复
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 
        //这里写一下逻辑代码
        return true;//返回true则不会处理回退事件;
       //返回super.onKeyDown(keyCode, event)则表示按照Android中默认方式处理
    }
    return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
    // 这里处理逻辑代码
    //return super.onBackPressed(); //如果要退出则返回
}

但是,最近在做一个TabHost切换效果的界面时,要求其他Tab按回退键时直接退到Home的Tab中,Home的Tab按回退键则退出当前放TabHost的Activity,于是我重写了那两个方法,发现都没有被调用的。如果在对应Tab中渲染的子级的Activity中重写则会对应的调用。通过差一些资源,发现了,在父级容器的Activity中需要重写dispatchKeyEvent方法,具体如下:

@Override
public boolean dispatchKeyEvent(KeyEvent event) { 
       if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 
           //这里处理逻辑代码
           return true; 
       } 
       return super.dispatchKeyEvent(event); 
}

【2017持续更新】修改Host文件,让你的Google跑起来 2017 Google hosts(2017-08-09更新hosts文件)

近期,相信大家都发现了,国内Google访问狠不给力,基本上打不开,谷歌在相关的服务器也被搬到了美国,这不禁让人感慨,谷歌难道要全面退出中国的节奏? 作为...

阅读全文

Android 中如何实现 显示和隐藏软键盘——附Demo下载

在Android开发中,经常会有一个需求,做完某项操作后,隐藏键盘,也即让Android中的软键盘不显示。今天,和大家分享如何利用代码来实现对Android的软件盘的隐...

阅读全文

实战——MyEclipse2014安装ADT插件

前段时间,本Eclipse部落里面分享了MyEclipse2014安装插件的几种方式(适用于Eclipse或MyEclipse其他版本),相信其中的方法方式也给了大家一些启示。Eclipse...

阅读全文

一条回应:“解决TabHost里面出现的按键事件onKeyDown方法无法捕获问题”

  1. 阿斯达斯的说道:

    非常感谢,我折腾一上午了,谢谢你

发表评论

电子邮件地址不会被公开。 必填项已用*标注