按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:windowSoftInputMode属性详解

android:windowSoftInputMode activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。 这个属性能影响两件事...

Activity退出后,键盘不收回

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

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

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

Android6.0 EncodingUtils等相关类被移除

6.0sdk中移除了org.apache.http.util.EncodingUtils等相关类 网上搜出来的方法都让我加依赖 compile 'org.apache.httpcomponen...

android 点击关闭软键盘

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

Android 输入法键盘和activity页面遮挡和自动弹出问题解决

本文主要介绍Android中如何解决输入法键盘和activity页面遮挡的问题。   总结: 不希望遮挡设置activity属性android:windowSoftInputMode="adju...
  • icy_xm
  • icy_xm
  • 2014-11-26 15:53
  • 2752

Activity退出后,键盘不收回

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

安卓自定义状态栏颜色以与APP风格保持一致

我们知道IOS上的应用,状态栏的颜色总能与应用标题栏颜色保持一致,用户体验很不错,那安卓是否可以呢?若是在安卓4.4之前,答案是否定的,但在4.4之后,谷歌允许开发者自定义状态栏背景颜色啦,这是个不错...

finish activity收回软键盘

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

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

自定义一个layout,覆写dispatchKeyEventPreIme(KeyEvent event)方法,请看QuickSearchBox的源码 /* * Copyright (C) 2010...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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