先讲 dialog的setOnKeyListener的监听key手机返回键
tipsDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){
if(haveDialog){
haveDialog=false;
tipsDialog.dismiss();
context.finish();
}
}
return false;
}
});
有时候dialog弹出来的时候按下返回键不想单单处理弹出框消失或者不想弹出框消失,
都是在这里进行监听处理的。可以同时完成弹出框消失和activity的退出。
在surfaceview中我们的onKeyDown 虽然是重写了view的函数,但是仍然需要在初始化的时候去声明获取焦点,setFocusable(true); 如果不调用此方法,那么会造成按键无效。原因是因为如果是自己定义一个继承自View的类,重新实现onKeyDown方法后,只有当该View获得焦点时才会调用onKeyDown方法,Actvity中的onKeyDown方法是当所有控件均没有处理该按键事件时,才会调用.
这里讲的如果是自己定义一个继承自View的类,重新实现onKeyDown方法后,只有当该View获得焦点时才会调用onKeyDown方法,Actvity中的onKeyDown方法是当所有控件均没有处理该按键事件时,才会调用很重要,当你自定义surfaceview,要进行处理onkeydown的时候必须要 setFocusable(true);
public EndlessMode(Context context, List<Element> list) {
super(context);
this.context = (EndlessActivity) context;
elementList = new ArrayList<Element>();
elementList.addAll(list);
sfh = this.getHolder();
language = Locale.getDefault().getLanguage();
sfh.addCallback(this);
setFocusable(true);
this.gamemode=this.context.gamemode;
}
看看构造函数里面必须要写不然按键失效