在自定义视图中处理后退按钮
Handling Back button in custom View
在使用 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();
}
}
这很好用(左边的截图)-
不过,我还尝试通过以下方式在我的自定义视图(覆盖onDraw
绘制可滚动游戏板和字母图块的方法)中检测后退按钮按下方法 -(允许应用程序用户取消图块交换或从游戏板上召回未播放的图块) - 但其中 none 被称为:
@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);
}
我在上面的方法中设置了断点,但是 none 被命中了。
请指教,如何解决这个问题。
这段代码帮助我在片段中找回了新闻事件
试试这个代码:
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;
}
});
在使用 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();
}
}
这很好用(左边的截图)-
不过,我还尝试通过以下方式在我的自定义视图(覆盖onDraw
绘制可滚动游戏板和字母图块的方法)中检测后退按钮按下方法 -(允许应用程序用户取消图块交换或从游戏板上召回未播放的图块) - 但其中 none 被称为:
@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);
}
我在上面的方法中设置了断点,但是 none 被命中了。
请指教,如何解决这个问题。
这段代码帮助我在片段中找回了新闻事件 试试这个代码:
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;
}
});