按back键直接退出Activity,不关闭软键盘

原创 2012年03月23日 09:39:09

自定义一个layout,覆写dispatchKeyEventPreIme(KeyEvent event)方法,请看QuickSearchBox的源码

/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.quicksearchbox.ui;

import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.inputmethod.InputMethodManager;
import android.widget.RelativeLayout;

/**
 * Finishes the containing activity on BACK, even if input method is showing.
 */
public class SearchActivityView extends RelativeLayout {

    public SearchActivityView(Context context) {
        super(context);
    }

    public SearchActivityView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SearchActivityView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    private Activity getActivity() {
        Context context = getContext();
        if (context instanceof Activity) {
            return (Activity) context;
        } else {
            return null;
        }
    }

    /**
     * Hides the input method.
     */
    protected void hideInputMethod() {
        InputMethodManager imm = (InputMethodManager)
                getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) {
            imm.hideSoftInputFromWindow(getWindowToken(), 0);
        }
    }

    /**
     * Overrides the handling of the back key to dismiss the activity.
     */
    @Override
    public boolean dispatchKeyEventPreIme(KeyEvent event) {
        Activity activity = getActivity();
        if (activity != null && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
            KeyEvent.DispatcherState state = getKeyDispatcherState();
            if (state != null) {
                if (event.getAction() == KeyEvent.ACTION_DOWN
                        && event.getRepeatCount() == 0) {
                    state.startTracking(event, this);
                    return true;
                } else if (event.getAction() == KeyEvent.ACTION_UP
                        && !event.isCanceled() && state.isTracking(event)) {
                    hideInputMethod();
                    activity.onBackPressed();
                    return true;
                }
            }
        }
        return super.dispatchKeyEventPreIme(event);
    }
}


Android结束Activity时键盘无法隐藏的问题

如题! Activity A切换到Acitvity B,且Activity B有Edittext(假设inputtype为number)处于focus状态键盘打开。 此时需要返回A。如果是在手机上传统...
  • OHRadiance
  • OHRadiance
  • 2017年02月14日 16:34
  • 1307

【Android】不同的View引起软键盘无法关闭问题解决方案

今天发现一个很奇怪的问题软键盘无法关闭了,同一段代码,换一个Activity就能正常执行,开始我以为是嵌套了fragment的原因,然后我放到外层activity里面同样不能调用,比较了下其他Acti...
  • u013372185
  • u013372185
  • 2017年05月09日 11:16
  • 560

finish activity收回软键盘

editText获取焦点后,会自动弹出软键盘,关闭的时候一般需要按返回键或者点击软键盘上的按钮,即使当前activity已经finish掉,软键盘依然存在在网上找了两种可用的方法, 在此记录://此方...
  • Ma_Yangyang
  • Ma_Yangyang
  • 2017年06月17日 15:42
  • 944

直接关闭开启着键盘的Activity问题

一个ViewPager中有4个Fragment第一个Fragment里面有一些TextView默认是gone,可以通过一些button进行显示隐藏,最后一个Fragment里面有个EditText进行...
  • q445697127
  • q445697127
  • 2014年03月14日 11:26
  • 1326

【小知识点总结】android:windowSoftInputMode属性详解 和 按back键直接退出Activity,不关闭软键盘的问题

activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。 这个属性能影响两件事情: 【一】当有焦点产生时,软键盘是隐藏还是显示 【二】是否减...
  • Jason_996
  • Jason_996
  • 2015年10月09日 17:52
  • 535

Activity退出后,键盘不收回

昨天在写代码的时候发现这个问题,以前也遇到过,但是没有找出原因,最后不了了之.这次有时间探究了一下. 事情是这样的:有两个相似的界面,本来想共用,但是后来没有共用,而是写了两个界面,且记作d和c...
  • mr_orange_klj
  • mr_orange_klj
  • 2016年10月03日 20:55
  • 604

android 点击关闭软键盘

在项目中,editText获取焦点后,会自动弹出软键盘,关闭的时候一般需要按返回键或者点击软键盘上的按钮, 即使当前activity已经finish掉,软键盘依然存在,会影响用户的体验。 网上目前有很...
  • jing110fei
  • jing110fei
  • 2014年12月11日 11:05
  • 6758

Android 软键盘盖住输入框的问题

当在Android的layout设计里面如果输入框过多,则在输入弹出软键盘的时候,下面的输入框会有一部分被软件盘挡住,从而不能获取焦点输入。 解决办法: 方法一:在你的activity中的oncr...
  • stonesharp
  • stonesharp
  • 2012年06月09日 16:21
  • 17115

activity中finish方法的学习一

今天想到一个问题,activity里面的静态变量,在activity打开新的activity时,并且调用finish(),新的activity中是否可以读到静态变量。  网上查了下,说的是fin...
  • cicilover
  • cicilover
  • 2014年07月03日 11:31
  • 624

将所有的Activity全部finish掉

(1)创建一个ActivityCollector.java,此类用作收集和销毁activity的公共类.public class ActivityCollector { public...
  • fuzhongbin
  • fuzhongbin
  • 2016年01月22日 15:01
  • 949
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:按back键直接退出Activity,不关闭软键盘
举报原因:
原因补充:

(最多只允许输入30个字)