2012-02-07 125 views
5

我看過幾篇關於如何通過點擊外部來解除對話的文章。但是有沒有辦法通過點擊對話窗口內部來獲得相同的功能?如何在Android中點擊它來關閉對話框?

有沒有對話框的任何監聽器會檢測到對話窗口上的一個水龍頭?

回答

3

想必您可以在對話框邊界內的任意位置檢測觸摸事件。如果您正在創建自定義對話框(例如,通過將一組View組合到某種佈局View中,然後使用.setContentView()將對話框的父內容View設置爲對話框的主內容視圖),那麼也許您可以簡單地將onTouch偵聽器設置爲該內容父母View。此外,您可以使用mDialog.findViewById()來抓住視圖,因此例如,如果您使用的是AlertDialog,則可能會以某種方式確定要使用哪個資源ID來抓住主佈局View

+0

謝謝。我在findViewById 0_0之前缺少對話框部分 – Ahmed 2012-02-16 16:25:04

0

您可以隨時創建自己的對話框活動,並在用戶單擊要關閉對話框的區域時調用finish()。

+0

謝謝你的答案。但我希望Dialog將鼠標懸停在當前活動上(在顯示當前活動的對話框的上方和下方有一個透明區域)。要詳細說明,單擊我的活動中的按鈕時會顯示對話框。我可以使用 dialog.setCanceledOnTouchOutside(true);點擊對話框外的區域來關閉對話框。 根據reks,我不能使用對話框上的任何按鈕!因此,我試圖尋找一種能夠在點擊時消除對話框的方式。 – Ahmed 2012-02-07 21:30:13

+0

您可以使用任何您想要的活動佈局;包括一個透明的。它看起來就像一個對話框,你可以使其表現出任何你想要的方式。如果你真的想要看起來像一個模式對話框,但具有自定義解除邏輯的東西,這將工作。 – 2012-02-07 21:33:22

1

如果在對話框中有佈局,則可以將該對象的引用視爲視圖,並在其上放置onClickListener。因此,假設您的對話框具有自定義佈局,並查看整個對話框,請獲取對該對話框的引用。

例如,假設一個對話框有一個名爲mainll的LinearLayout,包含您的自定義視圖,您可以:

LinearLayout ll - (LinearLayout) findViewById(R.id.mainll); 
ll.setOnClickListener(...) { onClick()... } 

然後任何時間任何東西被點擊的LinearLayout內,它會註冊一個點擊事件。

10

覆蓋Dialog.onTouchEvent(...)可捕獲屏幕上任何位置的任何水龍頭。要通過隨時隨地敲擊關閉該對話框:

Dialog dialog = new Dialog(this) { 
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
    // Tap anywhere to close dialog. 
    this.dismiss(); 
    return true; 
    } 
}; 

這個片段勾銷需要調用dialogObject.setCanceledOnTouchOutside(true);

0
here i have taken my close icon ,if u need u can take anything like button 

first of all u have implement to the class 

class somethingclass Dialog implements View.OnClickListener 

then set the event for particular 

     icon_close.setOnClickListener(this); 

then override the class function 

    @Override 
    public void onClick(View v) { 
     if(R.id.icon_close==v.getId()){ 
      dismiss(); 
     }else 
} 


Note: if passible u can give dilaog.dismiss();