使用Dialog自定义屏幕变暗

时间:2011-06-06 19:59:08

标签: android dialog

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

5 个答案:

答案 0 :(得分:39)

是的,确实如此。你可以控制它。

创建对话框后:

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

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

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

Blurring is deprecated since API14

  

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

答案 1 :(得分:25)

或者你可以这样做:

dialog.getWindow().setDimAmount(0.5f);

答案 2 :(得分:15)

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

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

答案 3 :(得分:8)

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

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

然后获取该对话框的窗口并添加一个名为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
}

然后显示你的对话框,

dialog.show();

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

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

然后解雇:

dialog.dismiss();

答案 4 :(得分:1)

以下参数适用于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可以分配给对话框。

dialog.getWindow().addContentView(view, params)