当按下后退按钮时,nexus手机会触发哪些关键动作?

时间:2016-08-02 12:59:07

标签: android android-softkeyboard back-button google-nexus

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

在正常模式下,Nexus看起来像这样,普通代码工作正常: Nexus without keyboard

但是当键盘弹出时,它看起来像这样,代码不会起作用:

Nexus with keyboard

1 个答案:

答案 0 :(得分:2)

对于Android API最多5:

    @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);
}

请参阅How to handle back button in activity

修改

此方法仅在隐藏键盘时有效..

根据这个答案:Detect back key press - When keyboard is open

要实施的最佳操作是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是您的活动类(this)。