使用Dialog自定义屏幕变暗

Cas*_*eyB 29 android dialog

在Android中,当您弹出一个对话框时,它背后的屏幕会变暗.有没有办法控制看起来像什么?例如,使它或多或少变暗或使用某种模式?

Ser*_*tov 41

是的.你可以控制它.

创建对话框后:

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

更新:您甚至可以在对话框后添加模糊:

dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
Run Code Online (Sandbox Code Playgroud)

自API14起,Blurring已被弃用:

此常量在API级别14中已弃用.
不再支持模糊.

  • 模糊不推荐使用 (2认同)
  • 它对我的活动没有任何影响,我不明白为什么 (2认同)

小智 25

或者你可以这样做:

dialog.getWindow().setDimAmount(0.5f);
Run Code Online (Sandbox Code Playgroud)

  • 此调用至少需要API级别14 (2认同)

小智 15

这个解决方案对我不起作用.还有另一种选择,您可以取消控制调光的标志.这段代码对我有用:

dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
Run Code Online (Sandbox Code Playgroud)

  • 您应该在设置dimAmount之前设置对话框contentView,否则无效 (3认同)

Nam*_*wal 11

回答很晚但是我确信随着时间的推移,事情会被弃用,所以我的回答肯定会对某些人有所帮助.首先创建一个对话框:

dialog = new Dialog(ActivityName.this);
dialog .setCancelable(false);
dialog .setContentView(R.layout.dialog_layout);
Run Code Online (Sandbox Code Playgroud)

然后获取该对话框的窗口并添加一个名为FLAG_DIM_BEHIND的标志,最后在屏幕上设置昏暗量.

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
}
Run Code Online (Sandbox Code Playgroud)

然后显示你的对话框,

dialog.show();
Run Code Online (Sandbox Code Playgroud)

在您关闭对话框之前,请清除标记:

dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
Run Code Online (Sandbox Code Playgroud)

然后解雇:

dialog.dismiss();
Run Code Online (Sandbox Code Playgroud)