2011-08-08 14 views
8

मैंने एक कस्टम संवाद किया है।डायलॉग की स्थिति कैसे सेट करें?

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="myBackgroundStyle" 
     parent="@android:style/Theme.Translucent.NoTitleBar" /> 
</resources> 

screenshot

Dialog dialog = new Dialog(this, R.style.myBackgroundStyle); 
dialog.setContentView(R.layout.dialog); 

dialog.show(); 

WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); 
params.y = 225; params.x = 225; 
params.gravity = Gravity.TOP | Gravity.LEFT;  
dialog.getWindow().setAttributes(params); 

लेकिन समस्या यह है कि यह ऊपरी बाएँ कोने में दिखाई देता है और मैं इसे जगह है जहाँ मैं इसकी आवश्यकता है एक तरह से नहीं मिल सकती है। params.y=225; params.x=225; किसी भी तरह से इसे प्रभावित नहीं करते हैं।

कोई विचार?


संपादित करें: तो मुझे लगता है कि (शैली/Theme.Dialog) की तरह एक्सएमएल है, तो मापदंडों और स्थान का काम ठीक है, लेकिन एक मॉडल छाया दिखाई देता है। क्या इसे हटाने का कोई तरीका है?

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

उत्तर

4

Theme.Panel का उपयोग शैली के parent के बजाय करने का प्रयास करें।

+0

धन्यवाद! काम किया! :) – Roger

2

100% सुनिश्चित नहीं है, लेकिन क्या यह params.gravity=Gravity.TOP | Gravity.LEFT; के साथ कुछ करना है?

एक और संपादित

ठीक तो, यह एक अधिक उपयोग की होना चाहिए: Calling android dialog without it fading the background

+0

वास्तव में, "थीम.Translucent.NoTitleBar" में इसकी तरह नहीं। अर्थात। अगर इसकी थीम। डियालॉग, तो पैरा ठीक काम करते हैं, लेकिन मुझे वह मोडल छाया मिलती है। – Roger

+0

उपरोक्त संपादन देखें। – Roger

+0

वास्तव में नहीं। यह लिंक टाइटल बार से उस छोटी छाया को हटाने के बारे में है, जबकि मुझे मॉडल छायांकन को हटाने की आवश्यकता है (यानी संवाद के पीछे पूरी स्क्रीन का अंधेरा)। – Roger

7

मानकों का एक नया सेट बनाने का प्रयास करें:

WindowManager.LayoutParams params = new WindowManager.LayoutParams(); 
params.y = 225; params.x = 225; 
params.gravity = Gravity.TOP | Gravity.LEFT;  
dialog.getWindow().setAttributes(params); 

संपादित करें: अगर आप संरक्षित करना चाहते हैं खिड़की के गुण, आप इसे दूसरी पंक्ति के रूप में जोड़ने का प्रयास कर सकते हैं:

params.copyFrom(dialog.getWindow().getAttributes()); 

हालांकि, ध्यान दें कि copyFrom विधि पूरी तरह से अनियंत्रित है, इसलिए मुझे नहीं पता कि यह ऐसा करता है जो ऐसा लगता है।

+0

नहीं, "Theme.Translucent.NoTitleBar" के साथ काम नहीं कर रहा है – Roger

0

बस params.gravity = गुरुत्वाकर्षण हटाएं। टीओपी | Gravity.LEFT; और यह काम करेगा। मैंने कोशिश की।

2

ऊपर कोड लाइन में ...

dialog.show(); 

दिखाई चाहिए के बाद

WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); 
params.y = 225; params.x = 225; 
params.gravity = Gravity.TOP | Gravity.LEFT;  
dialog.getWindow().setAttributes(params); 
... 

बातें आप संवाद पहले तो स्थापित करने एक्स दिखा रहे हैं के दिखता द्वारा, वाई संवाद के बाद निर्देशांक पहले ही स्क्रीन पर खींचा जा चुका है।

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