在自定义视图中处理后退按钮

Ale*_*ber 3 android back-button android-custom-view navigation-drawer drawerlayout

在使用DrawerLayout的Android游戏中,左侧和右侧导航抽屉由MainActivity中的以下代码关闭:

@Override
public void onBackPressed() {
    if (mDrawerLayout.isDrawerOpen(mLeftDrawer)) {
        mDrawerLayout.closeDrawer(mLeftDrawer);
    } else if (mDrawerLayout.isDrawerOpen(mRightDrawer)) {
        mDrawerLayout.closeDrawer(mRightDrawer);
    } else {
        super.onBackPressed();
    }
}
Run Code Online (Sandbox Code Playgroud)

这很好用(左侧截图) -

应用截图

但是我也试图通过以下方法检测我的自定义视图中的后退按钮按下(它覆盖onDraw了绘制可滚动游戏板和字母图块的方法) - (允许应用程序用户取消图块交换或从游戏板中调用未播放的图块) -但没有人被称为:

@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
    if (mSwapping && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
        cancelSwapLetters();
        return true;
    }

    return super.dispatchKeyEventPreIme(event);
}

@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
    if (mSwapping && keyCode == KeyEvent.KEYCODE_BACK) {
        cancelSwapLetters();
        return true;
    }

    return super.onKeyPreIme(keyCode, event);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (mSwapping && keyCode == KeyEvent.KEYCODE_BACK) {
        cancelSwapLetters();
        return true;
    }

    return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)

我在上面的方法中添加了断点,但没有一个被击中.

请告诉我,如何解决这个问题.

小智 10

这段代码帮助我在片段中找回了新闻事件,试试这段代码:

getView().setFocusableInTouchMode(true);
        getView().requestFocus();
        getView().setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {

                if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {

                    if(you handled back press) return true;
                    else return false;
            }
        });
Run Code Online (Sandbox Code Playgroud)