Android 按下后退按钮时,nexus手机会触发哪个按键动作?

Android 按下后退按钮时,nexus手机会触发哪个按键动作?,android,android-softkeyboard,back-button,google-nexus,Android,Android Softkeyboard,Back Button,Google Nexus,我想知道当用户在打开软键盘时按下nexus phone中的小倒三角形时,会调用哪个KeyEvent动作 在正常模式下,Nexus如下所示,正常代码工作正常: 但当键盘弹出时,它看起来像这样,代码无法工作: 对于最多5个android API: @Override public void onBackPressed() { // your code. } 对于API 5之前的android,您必须使用: @Override public boolean onKeyDown(in

我想知道当用户在打开软键盘时按下nexus phone中的小倒三角形时,会调用哪个KeyEvent动作

在正常模式下,Nexus如下所示,正常代码工作正常:

但当键盘弹出时,它看起来像这样,代码无法工作:


对于最多5个android API:

    @Override
public void onBackPressed() {
    // your code.
}
对于API 5之前的android,您必须使用:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // your code
        return true;
    }

    return super.onKeyDown(keyCode, event);
}
请参阅

编辑:

仅当键盘处于隐藏状态时,此方法才有效

根据这个答案:

要实现的最佳操作是dispatchKeyEventPreIme。 例如:

@Override
    public boolean dispatchKeyEventPreIme(KeyEvent event) {
        Log.d(TAG, "dispatchKeyEventPreIme(" + event + ")");
        if (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)) {
                    mActivity.onBackPressed();
                    return true;
                }
            }
        }

        return super.dispatchKeyEventPreIme(event);
    }

其中mActivity是您的活动类(此)。对于最多5个android API:

    @Override
public void onBackPressed() {
    // your code.
}
对于API 5之前的android,您必须使用:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // your code
        return true;
    }

    return super.onKeyDown(keyCode, event);
}
请参阅

编辑:

仅当键盘处于隐藏状态时,此方法才有效

根据这个答案:

要实现的最佳操作是dispatchKeyEventPreIme。 例如:

@Override
    public boolean dispatchKeyEventPreIme(KeyEvent event) {
        Log.d(TAG, "dispatchKeyEventPreIme(" + event + ")");
        if (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)) {
                    mActivity.onBackPressed();
                    return true;
                }
            }
        }

        return super.dispatchKeyEventPreIme(event);
    }

其中mActivity是您的活动类(此)。

@Override public void onBackPressed(){}@JCDecary我使用了onKeyDown(),当键盘隐藏且三角形指向左侧时,我将返回KeyEvent.KEYCODE\u,但在键盘存在的情况下,我不知道它触发了什么!也许这会对你有所帮助:。我不明白你在说什么want@Overridepublic void onBackPressed(){}@JCDecary我使用了onKeyDown(),当键盘被隐藏并且三角形指向左侧时,我得到KeyEvent.KEYCODE_返回,但在键盘存在的情况下,我不知道它触发了什么!也许这会对你们有所帮助:。我不明白你们想要什么。我说,在我使用的模拟器中,当键盘存在时,这段代码不会工作!当键盘打开或操作未启动时,调试器会输入该代码?我添加了2张照片并更新了问题,请看一看。这样我需要覆盖我的根布局视图,我不希望这样做。正如我所说,在emulator中,当键盘存在时,我使用该代码将无法工作!当键盘打开或操作未启动时,调试器输入该代码?我添加了2张照片并更新了问题,请看。这样我需要覆盖我的根布局视图,我不希望这样做。