2012-12-11 3 views
16

Ich versuche, den Hintergrund einer DialogFragment vollständig klar zu bekommen.DialogFragment mit klarem Hintergrund (nicht abgeblendet)

mit dem Arteinzelteil android:windowIsFloating auf true (Standardeinstellung) Einstellung die DialogFragment zeigt genau, wie ich will es, aber einen sehr verdunkelten Hintergrund gezeigt hat.

von android:windowIsFloating auf false setzen, habe ich den klaren Hintergrund ich will, aber die DialogFragment bläst bis etwa 95% des Bildschirms, um es nur einen winzigen Spalt zu verlassen, wo man zu der Ansicht durchschauen kann es überlagert.

Ich habe versucht Twoaks und kann nicht scheinen, dieses Verhalten zu überschreiben.

Muss ich einen PopupWindow verwenden, um die gewünschten Effekte zu erzielen, oder gibt es einen Stil Elemente, die ich überschreiben kann?

+0

ich über die LayoutParameter Flagge WindowManager.LayoutParams.FLAG_DIM_BEHIND gerade kam. Hoffentlich wird dies es tun ... – samosaris

Antwort

53

Was für mich funktioniert, ist die WinowManager.LayoutParams in onStart() der DialogFragment anzupassen:

@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

Sehr sauber ... Ich werde sehen, ob ich das nutzen kann. Vielen Dank! – samosaris

+4

+1, funktioniert für mich. Für ** no dim at all **, verwenden Sie 'windowParams.dimAmount = 0;'. Außerdem müssen Sie dies in 'onStart()', nicht 'onCreateView()' tun. – Jonik

+1

Warum funktioniert es nur in 'onStart()' warum nicht in 'onCreateView()'? – zIronManBox

3

Sie benötigen einen Griff auf Ihre DialogFrament zu bekommen (irgendwann nach .show genannt wird), und tun dies in einer der Veröffentlichung Runnable:

DialogFragment dialog; 

... 

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

Ich habe es von Aleks G Antwort auf Changing position of the Dialog on screen android.

2

Auch eine einfachere Lösung ist es, den Stil in der onCreate des DialogFragment zu ändern:

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

Damit wird auch der Dialogtitel entfernt – velis

1

erstellen Ihr eigener benutzerdefinierter Dialog erweitert sich mit FragmentDailog und überschreibt diese Methode

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

HINWEIS: Diese Antwort funktioniert für mich bei DialogFragment und BottomSheetDialogFragment