大家都知道Dialog是弹出提示框,往往android用它的时候不需要在意许多,对其中的按钮自己做监听就是了。
但是在使用物理按键也需要让它做响应的时候就出问题,怎么都无法响应,后面才发现,原来Dialog对物理按键有自己的响应。
所以自定义的Dialog的类还需要是继承Dialog的,那种不继承dialog,从而使用dialog的,是不能做出物理按键响应了。
所以,如果弹出dialog的时候,dialog会拦截物理按键响应,在内部调用,那么解决办法就是:
一: 第一种方式
1.首先自定义类得需要继承dialog
2.定义一个响应接口
public interface DialogOnKeyDownListener {
void onKeyDownListener(int keyCode, KeyEvent event);
}
3.在dialog类中做接收接口:
private DialogOnKeyDownListener dialogOnKeyDownListener;
public void setDialogOnKeyDownListener(DialogOnKeyDownListener dialogOnKeyDownListener) {
this.dialogOnKeyDownListener=dialogOnKeyDownListener;
}
4.在dialog类中对物理按键进行拦截,然后做出回调给调用此dialog的地方
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(dialogOnKeyDownListener!=null) {
dialogOnKeyDownListener.onKeyDownListener(keyCode, event);
}
return super.onKeyDown(keyCode, event);
}
一: 第二种方式
直接获取到dialog之后:
Dialog.setDialogOnKeyDownListener(new DialogOnKeyDownListener() {
@Override
public void onKeyDownListener(int keyCode, KeyEvent event) {
}
}
说到这里再大概说下,view也有这个方法。一般view对onKey不响应,activity执行了就完了。但edittext或者seekbar之类的会响应,需要注意的就是在dialog中加入editext,然而editext还需要自我控制这些按键监听的时候,就需要分清楚层次了。
默认按键响应优先级:dialog->activity->edittext。