`

按Back key把Activity关掉即使有键盘的时候

阅读更多
一般情况下,当键盘显示的时候,你按下back只会将键盘关掉,但有时候你想要不仅仅是把键盘关掉而已,还想把当前的activity/给关掉。那你可以重写你的activity的main view,下面的例子是我看QucikSearchBox ap中SearchActivityView.java。
/*
 * 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);
    }
}


监测到按下bakc key之后hideInputMethod();隐藏键盘activity.onBackPressed();关闭Activity.这样达到的效果是:但你在SearchActivity中按下bakc之后就会退出这个acitvity,不管键盘是否显示。
分享到:
评论
2 楼 追求幸福 2011-12-05  
pc0de 写道
谢谢分享啊  不过用你的方法除了点问题 我是重写的EditText  然后输入其它按键的时候  就变得很不河蟹了。      

怎么会不和谐呢?怎样个不和谐呢?有这个KeyEvent.KEYCODE_BACK判断吗?
1 楼 pc0de 2011-12-02  
谢谢分享啊  不过用你的方法除了点问题 我是重写的EditText  然后输入其它按键的时候  就变得很不河蟹了。      

相关推荐

    多activity的创建及其交互 demo

    默认情况下,新的Activity会被压入栈顶,当用户按下Back键时,栈顶的Activity会被弹出。了解任务栈可以帮助你设计更好的导航流程,比如使用`FLAG_ACTIVITY_CLEAR_TOP`或`FLAG_ACTIVITY_SINGLE_TOP`标志。 7. ...

    qml stackview实现安卓back键返回 和正常状态下的双击退出(全局过滤)

    在QML中,我们可以使用Qt.quit()方法来关闭应用,当back键被按下时。以下是一个基本的示例: ```qml import QtQuick 2.15 import QtQuick.Controls 2.15 ApplicationWindow { id: window width: 640 height: ...

    Dialog样式的Activity-可以在任何地方弹出的Dialog

    在Android开发中,`Dialog`样式`Activity`是一种常见的用户界面设计模式,它允许开发者创建一个看起来像对话框的全屏或部分屏幕视图,可以在应用程序的任何位置弹出。这种设计模式通常用于显示需要用户确认、输入...

    2.8 自定义BACK按键

    创建一个BroadcastReceiver,注册它在需要监听BACK键的Activity中,并在接收到ACTION_KEY_UP广播时执行自定义逻辑: ```java private BroadcastReceiver backKeyReceiver = new BroadcastReceiver() { @Override ...

    Android 多Activity实现页面转换

    例如,当用户按下后退键时,可以使用`onBackPressed()`覆盖默认行为,清理不需要的Activity。 总之,Android中的多Activity实现涉及Activity的声明、启动、数据传递、启动模式以及过渡动画等多个方面。理解并熟练...

    3个Activity跳转和数据传输

    每个任务(Task)都有一个回退栈,每次启动新的Activity时,系统会将其压入栈底,按下Back键时,会从栈顶取出并销毁Activity。合理设置启动模式,可以控制回退栈的行为,避免不必要的Activity实例。 总结,Activity...

    实现Activity之间切换的各种效果

    2. 结果处理:在被启动的Activity中,通过`setResult()`设置返回结果,然后调用`finish()`关闭当前Activity。 ```java Intent resultIntent = new Intent(); resultIntent.putExtra("key", "value"); setResult...

    Android 4.4.2 简单的人品测试

    默认情况下,每次启动新Activity,都会将其压入栈顶,而`back`键则会弹出栈顶的Activity,回到前一个Activity。 8. **TestRP**: 这可能是项目的主Activity或者测试类。在Android Studio中,通常会有一个名为 ...

    fragment-back-key-listen:制作片段以监听键事件

    在Android开发中,`Fragment`是AppCompatActivity中的一个重要组成部分,它允许我们把界面逻辑和UI组件分解成可重用的部分。然而,与Activity不同的是,Fragment并不直接接收系统的返回键事件。为了使Fragment能够...

    按2次退出app

    在Android应用开发中,用户通常可以通过点击设备的返回按钮(back key)来关闭或返回上一个活动(Activity)。然而,有些应用可能需要更安全或特定的退出方式,比如连续两次快速按下返回键来退出应用程序。这种功能...

    安卓Android源码——返回键退出程序的两种方式.rar

    在安卓(Android)开发中,实现应用程序通过返回键(back key)退出是一个常见的需求。本压缩包中的资源可能包含了两种不同的方法来实现这一功能。以下是关于这个主题的详细讲解: 一、第一种方式:重写Activity的...

    Android应用开发中模拟按下HOME键的效果(实现代码)

    要模拟按下HOME键的效果,可以在Activity的`onKeyDown`方法中处理BACK键事件。BACK键的key code是`KeyEvent.KEYCODE_BACK`。下面是一个简单的示例代码: ```java @Override public boolean onKeyDown(int keyCode, ...

    menu backKey

    在这个方法里,我们可以检测到用户按下返回键的动作,并根据需求进行相应的操作,如关闭当前子Activity或返回上一级Tab。 ```java public class MyActivityGroup extends ActivityGroup { @Override public ...

    Android 用户界面之重写onKeyDown方法源码.zip

    在这个例子中,当用户按下返回键时,自定义的逻辑会被执行,而不会触发系统的默认返回操作(如关闭当前Activity)。 在`源码说明.txt`中,可能包含了解释如何在实际项目中应用这些概念的详细步骤,包括如何根据业务...

    Android中文开发指南

    - **回退栈(Back Stack)**:Activity的回退栈遵循“后进先出”原则,当用户按下返回键时,最近的Activity会被弹出栈,直至关闭整个任务。 9. **启动任务 (Starting a Task)** - **启动新任务**:通过Intent设置...

    第一行代码笔记

    - 通过`setCancelable()`方法可以设置是否允许用户通过按下Back键来取消ProgressDialog。 #### 四、列表视图与适配器 12. **ListView优化**: - 使用ViewHolder模式可以减少频繁创建和销毁View的操作,提高...

    HomeWatcher监听代码实现

    Android系统为Activity提供了onBackPressed()方法,当用户按下Back键时,系统会自动调用这个方法。我们可以覆盖此方法来自定义Back键的行为: ```java @Override public void onBackPressed() { super....

    Android开发指南中文版.doc

    - **关键类(Key Classes)** - `Context`: 提供了应用程序的信息和服务访问接口。 - `Activity`: 代表一个屏幕界面,通常用于与用户交互。 - `Service`: 在后台运行的服务,可以长时间执行而无需用户界面。 - `...

    Android onSaveInstanceState和onRestoreInstanceState触发的时机

    从这句话我们可以知道,当某个 Activity 变得“容易”被系统销毁时,该 Activity 的 onSaveInstanceState 就会被执行,除非该 Activity 是被用户主动销毁的,例如当用户按 BACK 键的时候。 那么,什么时候 Activity...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得Chrome的性能和功能 目录 摘要 I ABSTRACT II 专业名词清单 III 第一章 绪论 1 1.1 研究背景与意义 1 1.2国内外相关...

Global site tag (gtag.js) - Google Analytics