2012-02-07 38 views
5

मैंने बाहरी पर क्लिक करके एक संवाद को खारिज करने के तरीके पर कई पोस्ट देखी हैं। लेकिन क्या संवाद विंडो के अंदर क्लिक करके समान कार्यक्षमता प्राप्त करने का कोई तरीका है?एंड्रॉइड में एक संवाद को अंदर क्लिक करके कैसे खारिज कर सकते हैं?

क्या संवाद के लिए कोई श्रोताओं हैं जो संवाद विंडो पर एक टैप का पता लगाएंगे?

उत्तर

3

संभवतः आप किसी संवाद की सीमा के भीतर कहीं भी एक स्पर्श ईवेंट का पता लगाना चाहते हैं। यदि आप एक कस्टम संवाद बना रहे हैं (यानी View के सेट को किसी प्रकार के लेआउट View में सेट करके और फिर को .setContentView() का उपयोग करके संवाद के मुख्य सामग्री दृश्य के रूप में सेट करके) तो शायद आप onTouch श्रोता को बस सेट कर सकते हैं वह सामग्री अभिभावक View। इसके अलावा, आप mDialog.findViewById() का उपयोग करके विचारों को पकड़ सकते हैं, इसलिए यदि उदाहरण के लिए आप AlertDialog का उपयोग कर रहे थे, तो शायद आप किसी भी तरह से यह निर्धारित कर सकते हैं कि संसाधन आईडी को इसका मुख्य लेआउट View पकड़ने के लिए उपयोग करना है।

+0

धन्यवाद। मैं findViewById 0_0 से पहले संवाद भाग खो रहा था – Ahmed

0

जब आप उस उपयोगकर्ता को उस क्षेत्र पर क्लिक करते हैं जहां आप अपना संवाद बंद करना चाहते हैं तो आप हमेशा अपनी खुद की संवाद गतिविधि और कॉल फिनिश() बना सकते हैं।

+0

जवाब के लिए धन्यवाद। लेकिन मैं अपनी वर्तमान गतिविधि पर संवाद होवर करना चाहता हूं (डायलॉग के नीचे और नीचे एक पारदर्शी क्षेत्र है जिसमें से मेरी वर्तमान गतिविधि प्रदर्शित होती है)। Eloborate करने के लिए, संवाद तब प्रदर्शित होता है जब मेरी गतिविधि में एक बटन क्लिक किया जाता है। मैं dialog.setCanceledOnTouchOutside (सत्य) का उपयोग कर संवाद के बाहर क्षेत्र पर टैप करके संवाद को खारिज करने में सक्षम हूं; रीक्स के अनुसार, मैं संवाद पर किसी भी बटन का उपयोग नहीं कर सकता! इसलिए, मैं ऐसे तरीके की तलाश करने की कोशिश कर रहा हूं जो क्लिक होने पर संवाद को खारिज कर देगा। – Ahmed

+0

आप किसी भी लेआउट का उपयोग किसी गतिविधि के साथ कर सकते हैं; जिसमें पारदर्शी है। यह एक संवाद बॉक्स की तरह दिखेगा और आप इसे किसी भी तरह से व्यवहार कर सकते हैं। यदि आप वास्तव में ऐसा कुछ चाहते हैं जो एक मॉडल संवाद बॉक्स की तरह दिखता है और व्यवहार करता है लेकिन कस्टम बर्खास्तगी तर्क के साथ, यह काम करेगा। –

1

यदि आपके पास अपने संवाद में एक लेआउट है, तो आप इसे देखने के लिए संदर्भ प्राप्त कर सकते हैं, और उस पर एक क्लिकक्लिकनर डाल सकते हैं। तो मान लें कि आपके संवाद में कस्टम लेआउट है, और पूरे संवाद के लिए देखें, इसका संदर्भ लें।

उदाहरण के लिए, एक संवाद संभालने 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); कॉल करने के लिए की जरूरत nullifies।

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();