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,但這看起來非常非常長,我想必須有一些更簡單的解決方案。
關於如何解決這個問題的任何想法?
void onBackPressed()。當活動檢測到用戶按下後退鍵時調用。你試過了嗎? – ElDuderino
問題是BackPressed實際上並不需要每次都按相同的工作方式,無論如何我必須解決它,我將它作爲幫助的答案。 – user2638180