2012-12-11 13 views
16

Próbuję uzyskać tło z DialogFragment, aby było całkowicie jasne.DialogFragment z przezroczystym tłem (bez przyciemnienia)

Po ustawieniu pozycji stylu android:windowIsFloating na wartość true (domyślnie), wyświetla się dokładnie taka, jak chcę, ale ma bardzo przyciemnione tło.

Ustawiając android:windowIsFloating false, mam jasne tło chcę, ale DialogFragment wysadza do około 95% ekranu, pozostawiając jedynie niewielką szczelinę wokół niej, gdzie można zobaczyć aż do widzenia nakładek.

Próbowałem wielu poprawek i nie wydaje się, aby zastąpić to zachowanie.

Czy muszę użyć PopupWindow, aby osiągnąć pożądane efekty, lub czy są jakieś elementy stylu , które mogę przesłonić?

+0

Właśnie natknąłem flagą LayoutParameter WindowManager.LayoutParams.FLAG_DIM_BEHIND. Mam nadzieję, że to zrobi ... – samosaris

Odpowiedz

53

Co działa dla mnie jest dostosowanie WinowManager.LayoutParams w onStart() z 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

Bardzo czyste ... Zobaczę, czy mogę tego użyć. Dzięki! – samosaris

+4

+1, działa dla mnie. Dla ** bez dimów **, użyj 'windowParams.dimAmount = 0;'. Musisz również zrobić to w 'onStart()', a nie 'onCreateView()'. – Jonik

+1

Dlaczego działa tylko w 'onStart()' dlaczego nie w 'onCreateView()'? – zIronManBox

3

trzeba uzyskać uchwyt do DialogFrament (kiedyś po .pokaż nazywa), i to zrobić w Użyto Runnable:

DialogFragment dialog; 

... 

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

mam go od odpowiedzi Aleks G do Changing position of the Dialog on screen android.

2

Jeszcze prostszym rozwiązaniem jest zmiana stylu w onCreate z DialogFragment:

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

Powoduje to również usunięcie tytułu okna dialogowego – velis

1

Tworzenie własny dostosowany dialog rozciąga się na FragmentDailog i zastępuje tę metodę

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

UWAGA: Ta odpowiedź pracuje dla mnie w przypadku DialogFragment i BottomSheetDialogFragment