2012-12-11 11 views
16

Sto cercando di ottenere lo sfondo di un DialogFragment per essere completamente chiaro.DialogFragment con sfondo chiaro (non disattivato)

Con l'impostazione della voce stile android:windowIsFloating su true (impostazione predefinita), i DialogFragment mostra esattamente come lo voglio, ma ha un background molto attenuata.

Impostando android:windowIsFloating su false, ottengo lo sfondo chiaro che voglio, ma il DialogFragment soffia fino a circa il 95% dello schermo, lasciando solo un piccolo gap intorno ad esso in cui è possibile vedere attraverso la vista si sovrappone.

Ho provato un paio di modifiche e non riesco a ignorare questo comportamento.

Devo usare uno PopupWindow per ottenere gli effetti desiderati oppure ci sono degli elementi di stile che posso sovrascrivere?

+0

Ho appena incontrato il WindowManager.LayoutParams.FLAG_DIM_BEHIND LayoutParameter bandiera. Spero che lo faccia ... – samosaris

risposta

53

Ciò che funziona per me è quello di regolare la WinowManager.LayoutParams in onStart() del DialogFragment:

@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

Molto pulito ... vedrò se posso usare questo. Grazie! – samosaris

+4

+1, funziona per me. Per ** no dim affatto **, usare 'windowParams.dimAmount = 0;'. Inoltre, devi farlo in 'onStart()', non 'onCreateView()'. – Jonik

+1

Perché funziona solo in 'onStart()' perché non in 'onCreateView()'? – zIronManBox

3

è necessario per ottenere un handle al tuo DialogFrament (qualche tempo dopo .Show si chiama), e fare questo in un Runnable Posted:

DialogFragment dialog; 

... 

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

ho presa da risposta di Aleks G per Changing position of the Dialog on screen android.

2

Anche una soluzione più semplice è quella di cambiare lo stile nel onCreate del DialogFragment:

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

Rimuove anche il titolo della finestra di dialogo – velis

1

Creare la tua finestra di dialogo personalizzata si estende con FragmentDailog e sostituisce questo metodo

@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; 
} 

NOTA: Questa risposta funziona per me in caso di DialogFragment e BottomSheetDialogFragment

Problemi correlati