2012-12-11 17 views
16

मैं पूरी तरह से स्पष्ट होने के लिए DialogFragment की पृष्ठभूमि प्राप्त करने का प्रयास कर रहा हूं।स्पष्ट पृष्ठभूमि के साथ संवाद प्रारूप (मंद नहीं)

स्टाइल आइटम android:windowIsFloating को सत्य (डिफ़ॉल्ट) पर सेट करने के साथ, DialogFragment बिल्कुल प्रदर्शित करता है कि मैं इसे कैसे चाहता हूं, लेकिन इसकी एक बहुत मंद पृष्ठभूमि है।

गलत पर android:windowIsFloating की स्थापना करके, मैं स्पष्ट पृष्ठभूमि मैं चाहता हूँ मिलता है, लेकिन जहां दृश्य यह ओवरले के माध्यम से देख सकते हैं DialogFragment स्क्रीन के लगभग 95%, अप करने के लिए चल रही है उसके चारों ओर केवल एक छोटे से अंतराल हो जाता है।

मैंने टन के बदलावों की कोशिश की है और इस व्यवहार को ओवरराइड नहीं कर पा रहे हैं।

क्या मुझे वांछित प्रभाव प्राप्त करने के लिए PopupWindow का उपयोग करने की आवश्यकता है, या क्या कुछ शैली आइटम हैं जिन्हें मैं ओवरराइड कर सकता हूं?

+0

मैं सिर्फ LayoutParameter झंडा WindowManager.LayoutParams.FLAG_DIM_BEHIND में आए मामले में मेरे लिए काम करता है। उम्मीद है कि यह यह करेगा ... – samosaris

उत्तर

53

मेरे लिए क्या काम करता है DialogFragment की onStart() में WinowManager.LayoutParams समायोजित करने के लिए है आपका स्वयं का अनुकूलित संवाद FragmentDailog के साथ विस्तारित करता है और इस विधि को ओवरराइड करता है

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    Dialog dialog = super.onCreateDialog(savedInstanceState); 

    //set the dialog to non-modal and disable dim out fragment behind 
    Window window = dialog.getWindow(); 
    window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
      WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 
    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
    return dialog; 
} 

नोट: यह जवाब का DialogFragment और BottomSheetDialogFragment

+0

बहुत साफ ... मैं देखता हूं कि मैं इसका उपयोग कर सकता हूं या नहीं। धन्यवाद! – samosaris

+4

+1, मेरे लिए काम करता है। ** ** के लिए ** कोई मंद नहीं, 'windowParams.dimAmount = 0;' का उपयोग करें। साथ ही, आपको इसे 'ऑनस्टार्ट()' में करना चाहिए, न कि'CreateView() '। – Jonik

+1

यह केवल 'ऑनस्टार्ट()' में क्यों काम करता है क्यों 'क्रिएटिव व्यू() 'में नहीं? – zIronManBox

3

आप एक हैंडल एक पोस्ट Runnable में (कुछ समय बाद .show कहा जाता है) अपने DialogFrament के लिए मिलता है, और ऐसा करने की जरूरत:

DialogFragment dialog; 

... 

WindowManagerLayoutParams wlp = dialog.Dialog.Window.Attributes; 
wlp.Flags &= ~WindowManagerFlags.DimBehind; 
dialog.Dialog.Window.Attributes = wlp; 

मैं Changing position of the Dialog on screen android को Aleks जी के जवाब से यह मिल गया।

@Override public void onStart() { 
    super.onStart(); 

    Window window = getDialog().getWindow(); 
    WindowManager.LayoutParams windowParams = window.getAttributes(); 
    windowParams.dimAmount = 0.90f; 
    windowParams.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND; 
    window.setAttributes(windowParams); 
} 
2

यहां तक ​​कि एक सरल समाधान DialogFragment की onCreate में शैली बदलने के लिए है:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setStyle(STYLE_NO_FRAME, getTheme()); 
} 
+0

यह संवाद शीर्षक भी हटा देता है – velis