Custom screen dim with Dialog

后端 未结 5 705
栀梦
栀梦 2020-12-13 04:12

In Android when you pop up a dialog the screen behind it dims. Is there any way to control what that looks like? For example making it dim more or less or using some kind

相关标签:
5条回答
  • 2020-12-13 04:40

    This solution did not work for me. There is another option, you can cancel the flag that control dimming. This code worked for me:

    dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
    
    0 讨论(0)
  • 2020-12-13 04:45

    Yes, it is. You can control it.

    After creating dialog:

    WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();  
    lp.dimAmount = 0.0f; // Dim level. 0.0 - no dim, 1.0 - completely opaque
    dialog.getWindow().setAttributes(lp);
    

    Upd: you can even add blur behind the dialog:

    dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
    

    Upd2: Blurring is deprecated since API14:

    This constant was deprecated in API level 14.
    Blurring is no longer supported.

    0 讨论(0)
  • 2020-12-13 04:48

    Or you can do:

    dialog.getWindow().setDimAmount(0.5f);
    
    0 讨论(0)
  • 2020-12-13 04:48

    The following parameters worked for me on Android 5.1

    WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.TYPE_PHONE,
                    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_DIM_BEHIND,
                    PixelFormat.TRANSLUCENT);
    
    params.dimAmount = 0.65f;
    

    params can be assigned to the dialog.

    dialog.getWindow().addContentView(view, params)
    
    0 讨论(0)
  • 2020-12-13 04:50

    Answering it quite late but I am sure things get deprecated with time so my answer would definitely help someone. First of all create a dialog:

    dialog = new Dialog(ActivityName.this);
    dialog .setCancelable(false);
    dialog .setContentView(R.layout.dialog_layout);
    

    Then get the window of that dialog and add a flag called FLAG_DIM_BEHIND and finally set the dim amount on the screen.

    Window window = dialog.getWindow();
    if(window != null){
       window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); // This flag is required to set otherwise the setDimAmount method will not show any effect
       window.setDimAmount(0.5f); //0 for no dim to 1 for full dim
    }
    

    Then show your dialog,

    dialog.show();
    

    And before you dismiss your dialog, clear the flags:

    dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
    

    And then dismiss:

    dialog.dismiss();
    
    0 讨论(0)
提交回复
热议问题