Android में पारदर्शी पृष्ठभूमि के साथ संवाद


247

मैं एंड्रॉइड में एक डायलॉग बॉक्स से काली पृष्ठभूमि कैसे हटा सकता हूं। तस्वीर समस्या को दिखाती है।

यहां छवि विवरण दर्ज करें

final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger); 

कृपया संवाद निर्माण के लिए कोड दिखाएं
MByD

यह स्थिति यहां कोड की दो पंक्तियों में भी काम करती है: stackoverflow.com/questions/16186818/…
DeePanShu

सबसे अच्छा उत्तर खोजें यहाँ लिंक विवरण दर्ज करें
कॉलिन्स उशी

जवाबों:


696

इस कोड को जोड़ें

 dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

या यह एक के बजाय:

dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

16
धन्यवाद! हालांकि, मैं का उपयोग करना पसंदdialog.getWindow().setBackgroundDrawable(new ColorDrawableResource(R.color.transparent));
RileyE

6
यह समाधान मदद करता है। मुद्दा है, चौड़ाई स्क्रीन फिट होगी। सामान्य संवाद की तुलना में कोई पैडिंग नहीं होगी। लेकिन एंड्रॉइड 4.1 इसे डिफ़ॉल्ट रूप से संभालता है
बसवराज हम्पली

1
अगर मैं अलर्ट डायलॉग का उपयोग कर रहा हूं तो क्या होगा ??
अहमद अर्सलान

1
यदि आप DialogFragment के अंदर हैं, तो बस getDialog ()। GetWindow () ... (व्यू क्रिएट होने के बाद, जैसे आपके onViewCreated कॉलबैक में)।
akohout

14
मैं उपयोग करना पसंद करता हूंdialog.getWindow().setBackgroundDrawableResource(R.color.transparent);
पीटर झाओ

82
<style name="NewDialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:background">@android:color/transparent</item>
</style>

जावा में उपयोग करें

Dialog dialog = new Dialog(this, R.style.NewDialog);

मुझे आशा है कि आपकी मदद करेंगे!


यह काम करेगा लेकिन यदि आप उस पारदर्शी क्षेत्र संवाद को बंद नहीं करेंगे तो इसे कैसे संभालना है?
जॉन

2
@ जॉन आप उपयोग कर सकते हैं: Dial.setCanceledOnTouchOutside (true);
लोंगलेव

डिफ़ॉल्ट के रूप में बाहर स्पर्श पर बाहर निकलने के लिए आप पेरेंट = "Theme.AppCompat.Dialog" का उपयोग कर सकते हैं।
डार्क लियोनहार्ट

31

मैंने सरल समस्या का सामना किया है और जो समाधान मैं लेकर आया हूं वह एक पारदर्शी बाचग्राउंड थीम लागू कर रहा था। अपनी शैली में इन पंक्तियों को लिखें

    <item name="android:windowBackground">@drawable/blue_searchbuttonpopupbackground</item>
</style>
<style name="Theme.Transparent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

और फिर जोड़ें

android:theme="@style/Theme.Transparent"

आपकी मुख्य मेनिफ़ेस्ट फ़ाइल में, संवाद गतिविधि के ब्लॉक के अंदर।

साथ ही आपकी संवाद गतिविधि XML सेट में

 android:background= "#00000000"

2
या यदि आप केवल डायलॉग की शैली सेट करना चाहते हैं, तो इसका उपयोग करें: <style name = "Theme.Transparent" parent = "@ android: style / Theme.Dialog">
रूजवेल्ट

16

किसी तरह से Zacharias समाधान मेरे लिए काम नहीं किया तो मैं इस विषय को हल करने के लिए नीचे विषय का उपयोग किया है ...

<style name="DialogCustomTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
</style>

नीचे इस विषय को संवाद के लिए सेट किया जा सकता है

final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme); 

का आनंद लें!!


1
<आइटम का नाम = "Android: windowBackground"> ​​@ रंग / पारदर्शी </ आइटम> इस पंक्ति को नीचे की पंक्ति से बदलना चाहिए अन्यथा आपको रंगों में पारदर्शी का मान जोड़ना होगा। xml फ़ाइल। <आइटम का नाम = "Android: windowBackground"> ​​@ Android: रंग / पारदर्शी </ आइटम>
अखिलजीते

12

आप इसका उपयोग कर सकते हैं:

setBackgroundDrawable(null);

विधि। निम्नलिखित में डॉक्टर है:

  /**
    * Set the background to a given Drawable, or remove the background. If the
    * background has padding, this View's padding is set to the background's
    * padding. However, when a background is removed, this View's padding isn't
    * touched. If setting the padding is desired, please use
    * {@link #setPadding(int, int, int, int)}.
    *
    * @param d The Drawable to use as the background, or null to remove the
    *        background
    */

यह काम करेगा, लेकिन केवल जब आप संवाद बॉक्स का विस्तार करते हैं, तो तेज़ समाधान नहीं, बल्कि अच्छा होता है ....
प्रोग्रामर

11

डायलॉग पॉप अप डिफॉल्ट ब्लैक बैकग्राउंड कलर या थीम कलर को भरें ताकि आपको TRANSPARENTडायलॉग में बैकग्राउंड सेट करना पड़े । नीचे दिए गए कोड की कोशिश करें: -

final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setContentView(R.layout.splash);
dialog.show();

10

यदि आप संवाद की गहरी पृष्ठभूमि को नष्ट करना चाहते हैं, तो इसका उपयोग करें

dialog.getWindow().setDimAmount(0);

धन्यवाद। यह वही है जिसकी मुझे तलाश है। यह बहुत अच्छा है।
फर्रुह हबीबुलदेव

1
यह सबसे सरल तरीके से काम करता है, धन्यवाद! हालाँकि, यदि आप चाहते हैं कि आपका ऐप 100% डिवाइसों पर चले (मैंने न्यूनतम एसडीके संस्करण 15 पर सेट किया है), तो एंड्रॉइड निम्नलिखित का सुझाव देता है: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Objects.requireNonNull(alertDialog.getWindow()).setDimAmount(0); }
डैनी ईके वैन डेर कोल

8

सभी मौजूदा उत्तरों के साथ एक मुद्दा मुझे यह मिला कि मार्जिन संरक्षित नहीं है। ऐसा इसलिए है क्योंकि वे सभी android:windowBackgroundविशेषता को ओवरराइड करते हैं, जो मार्जिन के लिए एक ठोस रंग के साथ जिम्मेदार है। हालाँकि, मैंने एंड्रॉइड एसडीके में कुछ खुदाई की और डिफ़ॉल्ट विंडो बैकग्राउंड को देखने योग्य पाया, और पारदर्शी संवादों की अनुमति देने के लिए इसे थोड़ा संशोधित किया।

सबसे पहले, अपने प्रोजेक्ट के लिए /platforms/android-22/data/res/drawable/dialog_background_material.xml कॉपी करें। या, बस इन पंक्तियों को एक नई फ़ाइल में कॉपी करें:

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:inset="16dp">
    <shape android:shape="rectangle">
        <corners android:radius="2dp" />
        <solid android:color="?attr/colorBackground" />
    </shape>
</inset>

जो सूचना android:colorपर सेट किया गया है ?attr/colorBackground। यह डिफ़ॉल्ट ठोस ग्रे / सफेद है जिसे आप देखते हैं। android:backgroundअपनी कस्टम शैली में परिभाषित रंग को पारदर्शी बनाने के लिए और पारदर्शिता दिखाने के लिए, हमें बस इतना करना है कि इसे बदलना ?attr/colorBackgroundहै @android:color/transparent। अब यह इस तरह दिखेगा:

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:inset="16dp">
    <shape android:shape="rectangle">
        <corners android:radius="2dp" />
        <solid android:color="@android:color/transparent" />
    </shape>
</inset>

उसके बाद, अपने विषय पर जाएं और इसे जोड़ें:

<style name="MyTransparentDialog" parent="@android:style/Theme.Material.Dialog">
    <item name="android:windowBackground">@drawable/newly_created_background_name</item>
    <item name="android:background">@color/some_transparent_color</item>
</style>

बदलने के लिए सुनिश्चित करें कि newly_created_background_nameआपने अभी बनाया drawable फ़ाइल का वास्तविक नाम के साथ, और की जगह some_transparent_colorवांछित पारदर्शी पृष्ठभूमि के साथ।

उसके बाद हम सभी को विषय निर्धारित करने की आवश्यकता है। इसे बनाते समय इसका उपयोग करें AlertDialog.Builder:

    AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);

फिर बस हमेशा की तरह संवाद बनाएं, बनाएं और दिखाएं!


मैंने AppCompat AlertDialog के साथ इसका अनुसरण किया लेकिन Android: पृष्ठभूमि का उपयोग करने के बजाय, मैंने सीधे पृष्ठभूमि के चित्र के Android के साथ एक पारदर्शी रंग सेट करना चुना: खुद रंग। Android सेटिंग करने के कारण ऐसा करने की आवश्यकता है: पृष्ठभूमि ने किसी तरह कुछ क्षेत्रों को अभी भी गैर पारदर्शी छोड़ दिया है। लेकिन तकनीक साझा करने के लिए धन्यवाद!
दिलीप पीजी

3

ZGnep के रूप में एक ही समाधान लेकिन xml का उपयोग कर:

android:background="@null"

3

इसे अपने कोड में आज़माएं:

getWindow().setBackgroundDrawableResource(android.R.color.transparent);

यह निश्चित रूप से काम करेगा ... मेरे मामले में ...! मेरा मित्र


3

यही मैंने AlertDialog के साथ पारभासी हासिल करने के लिए किया।

एक कस्टम शैली बनाई गई:

<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
    <item name="android:colorBackground">#32FFFFFF</item>
</style>

और फिर के साथ संवाद बनाएँ:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();

1

मेरे मामले में समाधान इस तरह काम करता है:

dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

और इसके अतिरिक्त कस्टम संवाद की Xml में:

android:alpha="0.8"

1

इस कोड का उपयोग करें जो मेरे साथ काम करता है:

    Dialog dialog = new Dialog(getActivity(),android.R.style.Theme_Translucent_NoTitleBar);
    dialog.show();

2
मुझे लगता है कि यह ओपी और आगे आने वाले आगंतुकों के लिए अधिक उपयोगी होगा, जब आप अपनी समझ में कुछ स्पष्टीकरण जोड़ते हैं।
रिपोर्टर

1

इन स्टाइल कोड को स्टाइल में सेट करें

<style name="Theme.Transparent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

और बस असत्य को सत्य से नीचे की रेखा में बदलें

<item name="android:backgroundDimEnabled">true</item>

यह आपकी पृष्ठभूमि को मंद कर देगा।


1

ध्यान दें: पृष्ठभूमि बदलने के लिए बिल्डर का उपयोग न करें।

Dialog dialog = new Dialog.Builder(MainActivity.this)
                                .setView(view)
                                .create();
dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

में बदलो

Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.show();

डायलॉग.बिल्डर का उपयोग करते समय, इसमें getWindow()विकल्प नहीं दिया गया है।


0
Window window = d.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

यह मेरा तरीका है, आप कोशिश कर सकते हैं!


1
अब इसे हटा दिया गया है: @deprecated Blurring अब समर्थित नहीं है।
arberg

0

यदि आपने DialogFramentकक्षा को बढ़ा दिया है , तो आप निम्न विषय निर्धारित कर सकते हैं:

setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);

और फिर अपनी शैलियों में कस्टम थीम बनाएं। xml फ़ाइल (मापदंडों के लिए @ LongLv का उत्तर देखें)

<item name="android:windowCloseOnTouchOutside">true</item>यदि उपयोगकर्ता संवाद के बाहर छूता है तो आप डायलॉग को बंद करना चाहते हैं तो जोड़ना न भूलें ।


0

कस्टम वर्ग के साथ कस्टम संवाद का उपयोग करने वाले किसी व्यक्ति के लिए आपको कक्षा में पारदर्शिता को बदलने की आवश्यकता है इस लाइन को ऑनक्रिएट () में जोड़ें:

getWindow().setBackgroundDrawableResource(android.R.color.transparent);

0

Dial.getWindow ()। setBackgroundDrawable (नया ColorDrawable (ContextCompat.getColor (ctx, android.R.color.transparent)));


0

सुनिश्चित करें कि R.layout.themechangerकोई पृष्ठभूमि रंग नहीं है क्योंकि डिफ़ॉल्ट रूप से संवाद में डिफ़ॉल्ट पृष्ठभूमि रंग होता है।

आपको भी जोड़ना होगा dialog.getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));

और अंत में

<style name="TransparentDialog">
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
</style>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.