2012-12-11 25 views
16

我試圖讓DialogFragment的背景變得完全清晰。具有清晰背景的對話框片段(未調暗)

隨着樣式項android:windowIsFloating設置爲true(默認值), 的DialogFragment顯示究竟如何我想它,但有一個非常暗淡的背景。

通過設置android:windowIsFloating爲假,我得到了清晰的背景我想,但DialogFragment炸燬約95%的屏幕, 只留下它周圍的微小的差距在那裏你可以看到通過它覆蓋的觀點。

我已經嘗試了噸的調整,似乎無法重寫此行爲。

我是否需要使用PopupWindow才能達到所需的效果,還是有一些可以覆蓋的樣式 項目?

+0

我對面的LayoutParameter標誌WindowManager.LayoutParams.FLAG_DIM_BEHIND前來情況下對我的作品。希望這會做到這一點... – samosaris

回答

53

我什麼工作是的DialogFragmentonStart()調整WinowManager.LayoutParams

@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); 
} 
+0

很乾淨...我會看看我是否可以使用它。謝謝! – samosaris

+4

+1,適合我。對於**沒有任何**,使用'windowParams.dimAmount = 0;'。此外,你必須在'onStart()',而不是'onCreateView()'中做到這一點。 – Jonik

+1

爲什麼它只在'onStart()'爲什麼不在'onCreateView()'中工作? – zIronManBox

3

你需要得到一個處理你的DialogFrament(.show被稱爲後的某個時間), 併爲此在一個Runnable的發佈:

DialogFragment dialog; 

... 

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

我是從阿萊克斯G公司的回答Changing position of the Dialog on screen android

2

即使是一個簡單的解決方法是改變風格在DialogFragment的OnCreate:

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

這也會刪除對話標題 – velis

1

創建您自己的定製對話框擴展爲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; 
} 

注意:這個答案在DialogFragmentBottomSheetDialogFragment