2017-05-30 75 views
1

當按下操作溢出時,顯示我已定義的菜單的選項,當按下硬件後退按鈕時,選項將按預期方式關閉。覆蓋操作欄上的硬件後退按鈕的行爲

但是我想給用戶提供觸發另一種行爲的可能性,所以我必須覆蓋它在顯示項目時如何反應按下硬件後退按鈕。

到目前爲止,我已經試過如下:

 myToolbar.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View view, int i, KeyEvent keyEvent) { 

      if (i == KeyEvent.KEYCODE_BACK) { 
       finish(); 
       return false; 
      } 
      else 
      { 
       return true; 
      } 
     } 
    }); 

正如所預期的這個代碼不工作,它甚至不被按下硬件後退按鈕時觸發。

我也試着用下面的類從工具欄延伸到創建自己的工具欄能夠覆蓋其onKeyPreIme事件:

public class LockToolbar extends Toolbar 
{ 
private KeyImeChange keyImeChangeListener; 

/* Must use this constructor in order for the layout files to instantiate the class properly */ 
public LockToolbar(Context context) 
{ 
    super(context); 
    // TODO Auto-generated constructor stub 
} 

public void setKeyImeChangeListener(KeyImeChange listener){ 
    keyImeChangeListener = listener; 
} 

public interface KeyImeChange { 
    public void onKeyIme(int keyCode, KeyEvent event); 
} 

@Override 
public boolean onKeyPreIme (int keyCode, KeyEvent event) 
{ 
    if(keyImeChangeListener != null){ 
     keyImeChangeListener.onKeyIme(keyCode, event); 
    } 
    return false; 
} 

} 

至少是對自己的類將正確編譯,但問題在於爲類工具欄定義的指令setSupportActionBar需要Toolbar對象正常工作,它不能支持lockToolbar。

我知道我可以重寫方法setSupportActionBar,但這看起來非常非常長,我想必須有一些更簡單的解決方案。

關於如何解決這個問題的任何想法?

+0

void onBackPressed()。當活動檢測到用戶按下後退鍵時調用。你試過了嗎? – ElDuderino

+0

問題是BackPressed實際上並不需要每次都按相同的工作方式,無論如何我必須解決它,我將它作爲幫助的答案。 – user2638180

回答

0

我終於有了這樣的代碼來解決這個問題:

@Override 
    public void onPanelClosed(int featureId, Menu menu) 
    { 

     timesclosed++; 

     if (exitinmenu) 
     { 
      finish(); 
     } 
     else 
     { 
      if ((exitinmenu2) && (timesclosed==1)) 
      { 
        finish(); 
      } 
      else 
      { 
       if ((exitinmenu3) && (timesclosed==5)) 
       { 
        finish(); 
       } 
      } 
     } 

     if (timesclosed==8) 
     { 
      timesclosed=0; 
     } 
    } 

每當我按下硬件後退按鈕,如果操作欄中的菜單顯示,該事件被解僱,其實它觸發4次,時間關閉和exitinmenu我可以控制菜單已關閉的位置。我想知道爲什麼它會點燃4次,但效果很好。