2010-05-05 22 views
14

मैं किसी भी डिफ़ॉल्ट एंड्रॉइड यूआई नियंत्रण (शीर्षक, पृष्ठभूमि, बटन, जो कुछ भी) के बिना पूरी तरह से कस्टम संवाद या पॉपअपविंडो प्राप्त करने का प्रयास कर रहा हूं।एंड्रॉइड कस्टम पॉपअपविंडो/संवाद

क्या यह संभव है? मैंने इसके लिए खोज करने में घंटों बिताए हैं, लेकिन कोई भाग्य नहीं ... ऐसा लगता है कि यह आसानी से संभव होना चाहिए, लेकिन मुझे यह नहीं मिल रहा है।

अधिमानतः यह एक्सएमएल से एक दृश्य को बढ़ाकर होगा, लेकिन इस बिंदु पर जो कुछ भी काम करेगा वह अच्छा होगा।

धन्यवाद।

+1

यह मदद कर सकता है http://stackoverflow.com/a/2700683/1118886 –

उत्तर

28

कदम मैं ले लिया:

  1. एक वर्ग Dialog विस्तार बनाएँ।
  2. ऑनक्रेट में, setContentView(x, y) पर x के साथ अपने आर। प्लेआउट और y होने के नाते R.style.popupStyle (नीचे देखें)।
  3. अपने res/values ​​/ style.xml में, आपको डिफ़ॉल्ट डायलॉगविंडो शैली को ओवरराइड करने की आवश्यकता है। मैंने सिर्फ एक शैली बनाने की कोशिश की जिसमें यह एक माता-पिता के रूप में है, लेकिन यह अभी भी सभी डिफ़ॉल्ट को साफ़ नहीं करता है। तो मैंने एंड्रॉइड गिट पेड़ की जांच की और डिफ़ॉल्ट शैली प्राप्त की, और बस इसे कॉपी-पेस्ट किया। यह एक है:
<style name="Theme.Dialog"> 
    <item name="android:windowFrame">@null</item> 
    <item name="android:windowTitleStyle">@android:style/DialogWindowTitle</item> 
    <item name="android:windowBackground">@android:drawable/panel_background</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> 
</style>

आप कुछ त्रुटियों मिल जाएगा, बस आधिकारिक Android styles.xml और themes.xml फाइलों से अधिक सामग्री को कॉपी करके उन्हें हल। यहां मेरी शैलियों की सामग्री है। Xml फ़ाइल: http://pastebin.com/RRR15YYS

यह आपको केवल एक सफेद पॉपअप, कोई सीमा नहीं, कुछ भी नहीं देता है। अनुकूलन शुरू करें। :)

मुझे सही रास्ते पर रखने के लिए mbaird के लिए धन्यवाद।

[संपादित करें] मैं फिर से अपने खुद के जवाब को देखने के लिए की जरूरत है, और मैं कम से कम दस मिनट तो यहाँ खोज आधिकारिक एंड्रॉयड शैलियों/विषयों फ़ाइलों बिताया है, वे कर रहे हैं, भविष्य में संदर्भ के लिए: styles.xml और themes.xml

+0

संदर्भ के लिए, मैंने इस दृष्टिकोण की कोशिश की लेकिन कदम थोड़ा उलझन में पाया (हालांकि बेहद सहायक)। मैंने संवाद वर्ग को विस्तारित करने वाली कक्षा बनाने के बिना एक समान परिणाम पूरा कर लिया है। मेरी विधि यहां है: http://stackoverflow.com/questions/3728990/how-to-create-a-completely-custom-dialogue-popup-in-android-change-overlay-colou/3736057#3736057 – justinl

+0

संकलन से बचने के लिए त्रुटि <शैली का नाम = "MyDialog" पैरेंट = "एंड्रॉइड: शैली/थीम। डायलॉग"> – EricLarch

+0

@benvd - मैंने आपके चरणों का पालन किया, और मैं अपने कोड से एंड्रॉइड के रूप में सटीक संवाद विषय प्राप्त करने में सक्षम हूं। लेकिन मेरा मुद्दा संवाद बॉक्स को दोबारा बदल रहा है। मैं इसे कहने के लिए कहूंगा (एक्स, वाई) स्थिति। मैं लेआउट मार्जिन के साथ कोशिश कर रहा था। लेकिन फिर डायलॉग.जावा (फ्रेमवर्क/बेस/कोर/जावा/एंड्रॉइड/एप) लाइन 143 (एंड्रॉइड 1.6) पर मुझे एक पंक्ति 'w.setGravity (Gravity.CENTER) दिखाई देती है; '। क्या यह मेरी मार्जिन सामग्री को रोक रहा है? क्योंकि मैं बस उस जगह पर तैनात नहीं कर सकता जहां मैं चाहता हूं। जिस क्षण मैं मार्जिन जोड़ता हूं, चीजें खराब हो जाती हैं। –

8

ऐसा लगता है कि आप वास्तव में AlertDialog को अनुकूलित करने का प्रयास कर रहे हैं। जो आप करना चाहते हैं उसके लिए आप अपनी खुद की कक्षा बनाने से बेहतर हो सकते हैं जो Dialog को बढ़ाता है, इसी तरह आप Activity तक फैले वर्ग को लिखकर गतिविधियों को कैसे बनाते हैं।

आप अपने कस्टम डायलॉग क्लास की ऑनक्रेट() विधि के अंदर setContentView() को कॉल करके लेआउट एक्सएमएल सेट कर सकते हैं, जैसा कि आप किसी गतिविधि में करेंगे।

मैंने अतीत में अलर्टडियलॉग को कस्टमाइज़ करने के तरीके पर सीमाएं निभाई हैं, और मैंने अपनी खुद की संवाद कक्षाओं को लागू करने के लिए केवल अपनी खुद की संवाद कक्षाएं लागू की हैं।

+0

मैं धन्यवाद संवाद एक कोशिश का विस्तार दे देंगे,। – benvd

+0

यह अभी भी मुझे सिस्टम पृष्ठभूमि और सीमा प्रदान करता है (जैसे यहां स्क्रीनशॉट की तरह: http://developer.android.com/guide/topics/ui/dialogs.html#CustomDialog)। क्या उनको अक्षम करने का कोई तरीका है? मैं बस अपना विचार चाहता हूं - और मेरे विचार के अलावा कुछ भी नहीं। मैं पृष्ठभूमि और बाकी सभी ड्राइंग का ख्याल रखूंगा। – benvd

+0

जब तक आप इसे ओवरराइड नहीं करते हैं तब तक आप हमेशा डिफ़ॉल्ट लेआउट थीम प्राप्त करने जा रहे हैं।ऐसा करने के लिए, जब आप अपनी कस्टम डायलॉग क्लास को तुरंत चालू कर रहे हैं तो संवाद कन्स्ट्रक्टर को कॉल करें जो 2 तर्क लेता है, और दूसरा तर्क के रूप में एक कस्टम थीम पास करता है। –

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