大家都知道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。