स्क्रीन की किसी भी स्थिति में AlertDialog दिखाएं


106

जब हम Android में AlertDialog दिखाते हैं तो यह स्क्रीन के केंद्र में दिखाई देता है। क्या स्थिति बदलने का कोई तरीका है?

जवाबों:


255

विभिन्न पोस्ट में खोज करने के बाद मैंने इसका हल ढूंढ लिया है।

कोड नीचे पोस्ट किया गया है:

private CharSequence[] items = {"Set as Ringtone", "Set as Alarm"};
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setItems(items, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {

            if(item == 0) {

            } else if(item == 1) {

            } else if(item == 2) {

            }
        }
    });

     AlertDialog dialog = builder.create();
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
     WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes();

 wmlp.gravity = Gravity.TOP | Gravity.LEFT;
 wmlp.x = 100;   //x position
 wmlp.y = 100;   //y position

 dialog.show();

यहां x स्थिति का मान बाएं से दाएं पिक्सेल है। Y स्थिति मूल्य के लिए नीचे से ऊपर तक है।


1
आप कस्टम अलर्ट डायलॉग भी बना सकते हैं। मैंने अभी हाल ही में ऐसा किया था और फिर डिस्प्ले को चौड़ाई और ऊंचाई प्राप्त करनी थी और फिर उन मूल्यों के प्रतिशत के आधार पर एक्स और वाई को सेट किया, इस तरह लेआउट ने अच्छी तरह से स्केल किया। डेवलपर
.android.com

15
यह काम करता है लेकिन मुझे इसे जोड़ना था: WMLP.gravity = Gravity.TOP | Gravity.LEFT; अन्यथा x और y मान स्क्रीन के केंद्र से ऑफसेट के रूप में उपयोग किए जाते थे।
BoD

1
बस अनुभव को साझा करने के लिए: उपरोक्त कोड केवल तब तक काम करता है जब तक कि संवाद पूरी तरह से स्क्रीन पर रह सकता है। उदाहरण के लिए, यदि नया y- समन्वय बहुत बड़ा है, तो संवाद स्क्रीन पर सबसे निचले स्थान पर चला जाता है जो अभी भी पूरे संवाद को दिखाता है। यहाँ मुश्किल हिस्सा यह है कि लेआउट पैरामीटर्स का x और y मान तब से दिखाता है जब संवाद विंडो के ऊपरी बाएँ कोने के निर्देशांक अब और उपयोग नहीं किए जा सकते हैं, उदाहरण के लिए खिड़की के एक रिश्तेदार आंदोलन की गणना के लिए इस्तेमाल किया जा सकता है एक प्रस्ताव पर प्रतिक्रिया।
नंतोका

1
आकर्षण की तरह काम करता है .. लेकिन wmlp.x = 100; //x position wmlp.y = 100;आपको बस सेट करने की आवश्यकता नहीं है गुरुत्वाकर्षण सेट wmlp.gravity = Gravity.TOP | Gravity.LEFT;पर्याप्त है
अजय मिस्त्री

14

यदि आप उदाहरण के लिए प्रगतिदिवस को थोड़ा और नीचे ले जाना चाहते हैं, और एक्सकैट पिक्सेल स्थिति निर्धारित नहीं करते हैं, तो यह बहुत आसान है:

progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;

मैं सतर्क संवाद के लिए लगभग 10 डीपी मार्जिन देना चाहता हूं जिसका गुरुत्वाकर्षण केंद्र है। क्या मैं उपरोक्त कोड का उपयोग कर सकता हूं? यदि नहीं, तो क्या ऐसा करने का कोई और तरीका है?
अमन वर्मा

5

सेटिंग को जानकारी के प्रभाव में लाने के लिए, मैंने निम्नलिखित कोड जोड़ा
dialog.getWindow().setAttributes(wmlp);

जिप्सिकोडर के उत्तर में wmlp के मूल्य को बदलने के बाद, या wmlp की सेटिंग मेरे परीक्षण से प्रभावी नहीं होती है।


0

ये उत्तर अलर्टडायॉग की स्थिति को आगे बढ़ाएंगे, हालांकि, प्रदर्शित संवाद की स्थिति में संवाद के आसपास पैडिंग भी शामिल होगी।

यदि आप इस पैडिंग से छुटकारा पाना चाहते हैं (उदाहरण के लिए, स्क्रीन के निचले हिस्से के सामने अपने संवाद को फ्लश करने के लिए), तो आपको अपनी शैलियों में डिफ़ॉल्ट AlertDialog स्टाइल को ओवरराइड करना होगा। विंडो को सेट करने के लिए विंडो पर क्लिक करें। :

<resources>
    <!--  Example app theme - mine uses the below -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:alertDialogTheme">@style/MyDialogTheme</item>
    </style>

    <style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Full width -->
        <item name="android:layout_width">fill_parent</item>

    <!-- Null window background kills surrounding padding -->
        <item name="android:windowBackground">@null</item>
        <item name="android:windowNoTitle">true</item>

     </style>
</resources> 

स्वीकार किए गए उत्तर में वर्णित अनुसार Window.LayoutParameters सेट करने के साथ-साथ।

@David Caunt के लिए विशेष चिल्ला-चिल्लाकर जिसका जवाब: सीमा को हटा दें, डायलॉग से गद्दी ने इस तस्वीर को पूरा किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.