2017-05-30 77 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次,但效果很好。