0

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

在正常模式下,Nexus 看起来像这样,正常代码工作正常: 没有键盘的 Nexus

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

带键盘的 Nexus

4

1 回答 1

2

对于最多 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);
}

请参阅如何处理活动中的后退按钮

编辑:

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

根据这个答案: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)在哪里。

于 2016-08-02T13:14:45.980 回答