2010-09-16 11 views
39

मैं एंड्रॉइड में डिफ़ॉल्ट संवाद घटक को पूरी तरह से फिर से त्वचा बनाना चाहता हूं। विशेष रूप से मैं यह करने के लिए करना चाहते हैं:एंड्रॉइड में पूरी तरह से कस्टम डायलॉग/पॉपअप कैसे बनाएं (ओवरले रंग और संवाद विंडो लेआउट बदलें)

  • बदलें एक अर्द्ध पारदर्शी सफेद करने के लिए डिफ़ॉल्ट काला से अर्द्ध पारदर्शी ओवरले पृष्ठभूमि।

  • बदलें डिफ़ॉल्ट विंडोड फ्रेम सीमा, को दूर करने और एक लेआउट एक्सएमएल में परिभाषित किया गया और इसकी जगह से वार्ता विंडो (यह सिर्फ अस्थायी बटन के साथ सीमारहित ग्राफ़िक रूप में कोई वास्तविक फ्रेम जा रहा है।।)

मैं डायलॉग बॉक्स (जैसे http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application) के भीतर के लिए एक कस्टम लेआउट बनाने के बारे में ट्यूटोरियल देखा है, लेकिन मैं ओवरले का रंग बदलने और/या पूरी तरह से संवाद विंडो को अनुकूलित के बारे में कुछ भी नहीं देखा है और इसे एक ओवरला में बदलना वाई "खिड़की" के साथ।

उत्तर

82

मैं इस समस्या का समाधान और निम्न चरणों का उपयोग एक कस्टम रंग का अर्द्ध पारदर्शी ओवरले पृष्ठभूमि के साथ अपने स्वयं के कस्टम पॉपअप ओवरले बना लिया है:

1 - अपने res/values ​​/ फ़ोल्डर में एक नया xml फ़ाइल बनाएँ और इसे style.xml

2 - यहां वह जगह है जहां आप अपनी संवाद गुणों को परिभाषित करेंगे। यह मेरी तरह दिखता है। यदि आप स्क्रीन पर दिखाए गए डिफ़ॉल्ट सेमी-पारदर्शी ब्लैक ओवरले को प्रतिस्थापित करना चाहते हैं, तो आपको windowIsFloating को झूठी पर सेट करना होगा, और अपने लेआउट की पृष्ठभूमि को जो भी रंग आप चाहते हैं उसे संशोधित करना होगा। यहाँ है कि नीचे मेरी फाइल मैं का उपयोग किया है है:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="CustomDialogTheme" parent="@android:style/Theme.Dialog"> 
     <item name="android:windowBackground">@color/transparent_white</item> 
     <item name="android:windowIsFloating">false</item> 
     <item name="android:windowNoTitle">true</item> 
    </style> 
</resources> 

3 - अपने जावा कोड में वापस, जब संवाद वस्तु बनाने, निर्माता है कि दोनों संदर्भ और विषय से गुजरता है का उपयोग करें। उदाहरण के लिए। myDialog = new Dialog(this, R.style.CustomDialogTheme); (CustomDialogTheme नाम 2 विशेषता से शैलियों.एक्सएमएल में निर्दिष्ट विशेषता विशेषता है)

4 - बस अपने संवाद संवाद सामग्री को जो भी लेआउट आप दिखाना चाहते हैं, उसे बस सेट करें। उदाहरण के लिए। myDialog.setContentView(R.layout.my_custom_overlay); आप अपने संवाद स्क्रीन के केंद्र में प्रकट करने के लिए चाहते हैं, तो इसके मूल तत्व के android:layout_gravity

+4

यह सीमा से छुटकारा पाता है लेकिन यह अभी भी मेरे लेआउट के चारों ओर एक काला रेखा छोड़ देता है .. कोई विचार? –

19

को center यह मेरे लिए महान काम किया सेट है, लेकिन संवाद को बंद करने के लिए कैसे याद आ रही है। अगर आपके पास बंद करने के लिए आपके कस्टम लेआउट में कोई बटन है, तो श्रोता को जोड़ने और संवाद विंडो को बंद करने का तरीका यहां बताया गया है।

final Dialog d = new Dialog(this,R.style.CustomDialogTheme); 
d.setContentView(R.layout.custom_dialog); 
d.show(); 

Button close_btn = (Button) d.findViewById(R.id.close_btn); 
close_btn.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     d.dismiss(); 
    } 
}); 
+1

उस अतिरिक्त जानकारी को जोड़ने के लिए धन्यवाद :) – justinl

संबंधित मुद्दे