2

在一個文字遊戲爲Android與DrawerLayout左,右導航抽屜是由下面的代碼在MainActivity關閉:處理後退按鈕自定義視圖中

@Override 
public void onBackPressed() { 
    if (mDrawerLayout.isDrawerOpen(mLeftDrawer)) { 
     mDrawerLayout.closeDrawer(mLeftDrawer); 
    } else if (mDrawerLayout.isDrawerOpen(mRightDrawer)) { 
     mDrawerLayout.closeDrawer(mRightDrawer); 
    } else { 
     super.onBackPressed(); 
    } 
} 

這非常適用(左側截圖) -

app screenshot

但是我也試圖檢測後退按鈕按下在我的自定義視圖(這將覆蓋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); 
} 

我有在上述方法中加入了斷點,但沒有一個被擊中。

請告訴我,如何解決這個問題。

回答

7

此代碼幫助我在一個片段回來的新聞發佈會上 試試這個代碼:

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; 
      } 
     }); 
+1

調用'setFocusableInTouchMode(真)'和'requestFocus()方法'在我的自定義視圖,所有3種方法已經經過按此順序調用:'dispatchKeyEventPreIme','onKeyPreIme','onKeyDown'。謝謝 –

+0

很高興我能幫到你。乾杯! – vaibhav

+0

在DialogPlus庫中,不存在'setFocusableInTouchMode'。他不確定? –