कस्टम डायलॉगग्रैगमेंट को फ्रैगमेंट के ऊपर पारदर्शी नहीं बना सकता


99

मुझे एक टुकड़े पर एक संवाद बनाने की आवश्यकता है (जो पूरी स्क्रीन को लेता है)। संवाद को एक तैरता हुआ संवाद होना चाहिए, जो खंड के ऊपर खंडित हो जाएगा और खंड के बाहर अंधेरा हो जाएगा।

कस्टम डायलॉग के लिए, मेरे पास एक रेखीय लेआउट है जिसमें घुमावदार किनारे हैं, चाहे मैं कुछ भी करूं, डायलॉग में सभी तरफ बहुत कम (बहुत छोटा) बॉर्डर है। मैंने इसे पारदर्शी बनाने के लिए और दूर जाने के लिए सब कुछ करने की कोशिश की है (ताकि संवाद के सभी रैखिक लेआउट - घुमावदार बॉक्स)

DialogFragment के लिए, मेरे पास onCreateView के लिए यही है

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    LinearLayout layout =(LinearLayout)inflater.inflate(R.layout.custom_dialog, null);
    LinearLayout item = (LinearLayout)layout.findViewById(R.id.display_item);
    populateItemData(item, inflater);
    return layout;
}

custom_dialog सिर्फ एक LinearLayout है जिसमें android: backgroung # 000000 पर सेट है

कस्टम डायलॉग के लिए यह मेरी शैली है

<style name="CustomDialog" parent="android:style/Theme.Dialog">
    <item name="android:windowBackground">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:alwaysDrawnWithCache">false</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

मैंने इस शैली में सभी प्रकार के संयोजनों की कोशिश की (जो मैंने ऑनलाइन देखा है) से और मैं उस कष्टप्रद काले बॉर्डरिंग से छुटकारा नहीं पा सकता, मैं इसे सफेद या किसी अन्य रंग में चित्रित कर सकता हूं यदि मैं उस रैखिक पृष्ठभूमि को किसी अन्य के अलावा सेट करता हूं # 000000 ...

मैंने इस पर शाब्दिक रूप से 3-4 घंटे बिताए हैं, मुझे आशा है कि कोई और मदद कर सकता है ...

जवाबों:


304

प्रयत्न

getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

अपने में DialogFragmentकीonCreateView


5
आप आधी पारदर्शी काली पृष्ठभूमि (डिमिंग) को भी निकालना चाहते हैं, इस उत्तर को देखें: stackoverflow.com/a/33800422/2115904
Andriy Bas

4
सभी मार्जिन को भी हटा देता है .. डायलॉग का विस्तार पूर्ण चौड़ाई तक किया जाता है।
उदय

1
और यह एक अपवाद का कारण होगा java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window android.app.Dialog.getWindow()' on a null object reference:।
कूलमाइंड

1
इसके getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent);बजाय आप कॉल कर सकते हैं । इसे अपवाद के रूप में लागू करने के लिए नहीं, आपको DialogFragmentगतिविधि के माध्यम से या फ्रैगमेंट से dialogFragment.show(...);विधि के माध्यम से कॉल करना चाहिए , न कि फ्रैगमेंटट्रांसलेशन से add
CoolMind

2
मामले में किसी को Kotlin टुकड़ा की तलाश में है, यहाँ यह है: dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
फ्रांसिस लैक्ले

24

यह कोशिश करें ( मैं एक 100% कस्टम डायलॉगफ्रैगमेंट कैसे बनाऊं ) यह काम संवाद के लिए

    Dialog dialog = new Dialog(getActivity());

    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);

    dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);      

        // layout to display
    dialog.setContentView(R.layout.add_edit);

    // set color transpartent
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

    dialog.show();

15

अपने विषय को इस तरह सेट करें जैसे मेरे लिए काम किया

<style name="MyDialog" parent="Base.Theme.AppCompat.Light.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

और अपने संवाद खंड में इस तरह सेट करें

public class Progress extends DialogFragment {


int style = DialogFragment.STYLE_NO_TITLE;
int theme = R.style.MyDialog;

public Progress() {
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(style, theme);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.progress, container, false);
}
}

11

में onActivityCreated

getDialog().getWindow().getAttributes().alpha = 0.9f; // An alpha value to apply to this entire window. An alpha of 1.0 means fully opaque and 0.0 means fully transparent

के लिए DialogFragmentपारदर्शी


8

पूरी तरह से पारदर्शी उपयोग के लिए: setStyle (DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);

कस्टम बैकग्राउंड के लिए आप में एक स्टाइल फाइल-वैल्यू फोल्डर (मान / style.xml) डालें और इसका उपयोग करें: सेट करें।

अपनी शैली की फाइल में श्रद्धांजलि को ओवरराइड करें: android: windowBackground to be @ color / DialogBackgroundBlackSemiTransparent


7

आप इसे Dialog Fragment या BottomSheetDialogFragment में जोड़कर प्राप्त कर सकते हैं

में onCreateDialogविधि

@Override
   public Dialog onCreateDialog(Bundle savedInstanceState) {
       Dialog dialog = super.onCreateDialog(savedInstanceState);
       dialog.getWindow().setGravity(Gravity.BOTTOM);
       dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
       dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
       return dialog;
   }

setBackgroundDrawableResourceऔर clearFlagsमेरे लिए काम करता है (kotlin, android api v28)
Wesely

6
<style name="BaseDialogTheme" parent="Base.Theme.AppCompat.Light.Dialog">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="colorControlNormal">@color/colorAccent</item>
    <item name="colorControlActivated">@color/colorAccent</item>

    <item name="android:windowFullscreen">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:colorBackground">@android:color/transparent</item>
    <item name="android:windowIsTranslucent">true</item>


    <item name="android:windowIsFloating">true</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:windowActionModeOverlay">false</item>
    <item name="android:windowCloseOnTouchOutside">true</item>
    <item name="android:backgroundDimAmount">.00</item>//this line is changed alpha from 1.0 to 0.0(full transparent) 

</style>



@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(STYLE_NO_FRAME, R.style.BaseDialogTheme);
    }

4

जो onCreateDialogइसके बजाय AlertDialog बिल्डर का उपयोग कर रहे onCreateViewहैं निम्नलिखित कोड की तरह विषय असाइन कर सकते हैं। विषयों का पूरा सेट R.style से पाया जा सकता है । यह मत भूलो कि उनमें से कुछ ने हाल ही में समर्थन किया है और पुराने डिवाइस फोन पर उपलब्ध नहीं हैं।

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), android.R.style.Theme_Translucent);
        View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_album, null);
        builder.setView(view);

        return builder.create();
    }

धन्यवाद, यह वही है जो मैं खोज रहा था।
मिलाद फरीदिया

3

यदि आप इसे पसंद करते हैं, तो इसे आज़माएँ:

public TransparentDialog()
{
    super();
    setStyle(STYLE_NO_FRAME, R.style.AppTheme);
}

0

प्रति स्वीकृत उत्तर, कोटलिन में

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    var v = super.onCreateView(inflater, container, savedInstanceState)
    dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
    return v
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.