天天看點

android Dialog彈出框對實體按鍵的響應

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