DialogFragment with clear background (not dimmed)

前端 未结 4 1336
小蘑菇
小蘑菇 2020-11-30 02:01

I\'m trying to get the background of a DialogFragment to be completely clear.

With setting the style item android:windowIsFloating to true

相关标签:
4条回答
  • 2020-11-30 02:32

    What works for me is to adjust the WinowManager.LayoutParams in onStart() of the 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 讨论(0)
  • 2020-11-30 02:32

    Create your own Customized dialog extends with FragmentDailog and override this method

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

    NOTE: This answer works for me in case of DialogFragment and BottomSheetDialogFragment

    0 讨论(0)
  • 2020-11-30 02:36

    You need to get a handle to your DialogFrament (sometime after .show is called), and do this in a Posted Runnable:

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

    I got it from Aleks G's answer to Changing position of the Dialog on screen android .

    0 讨论(0)
  • 2020-11-30 02:39

    Even a simpler solution is to change the style in the onCreate of the DialogFragment:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(STYLE_NO_FRAME, getTheme());
    }
    
    0 讨论(0)
提交回复
热议问题