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