按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开发中软键盘的常见问题

软键盘显示的原理       软件盘的本质是什么?软键盘其实是一个Dialog。        InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Win...

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

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

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

如题! Activity A切换到Acitvity B,且Activity B有Edittext(假设inputtype为number)处于focus状态键盘打开。 此时需要返回A。如果是在手机上传统...

Android软键盘弹出,返回键Activity不结束

Activity中若弹出软键盘,按返回键将先相应返回键。 若想按下返回键结束Activity: @Override public boolean dispatchKeyEvent(KeyEv...

Android 软键盘自动弹出和关闭

在我们写修改信息或者搜索,修改密码等界面的时候,用户进入这个界面的主要目的就是输入修改/查找 某些信息,为了用户体验应该自动弹出软键盘而不是让用户主动点击输入框才弹出。1.软键盘的自动弹出privat...

禁止进入activity自动弹出键盘

在Manifest.xml中设定activity的属性 android:windowSoftInputMode="stateHidden|stateUnchanged" 附相关属性: "stat...
  • Hknock
  • Hknock
  • 2014年01月22日 17:22
  • 21932

Activity退出后,键盘不收回

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

html5结合flash实现视频文件在所有主流浏览器兼容播放

由于html5的出现,让网页中的视频、音频有了更加便捷的实现方式。但是video、audio标签只在IE 9+、Safari 3+、FireFox 4+、Opera 10+、Chrome 3+的浏览器...

H5音频<audio/>样式修改,拖拽、点击进度操作、总时长加载

H5音频自定义样式,拖拽、点击改变进度操作,总时长 during 加载 1>“点击播放”和"点击暂停" 调用原生audio.play() 和 audio.pause()来对进度条进行操作 2>总时长...

关于activity和fragment中点击edittext之外的空白区域使软键盘消失的解决办法

大家都知道的使软键盘消失的方法很简单 如下InputMethodManager imm = (InputMethodManager) getSystemService( INPUT_METHO...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:按back键直接退出Activity,不关闭软键盘
举报原因:
原因补充:

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