【发布时间】:2011-09-09 14:00:01
【问题描述】:
在 Android 中,当您弹出一个对话框时,它后面的屏幕会变暗。有什么办法可以控制它的外观吗?例如使其变暗或使用某种模式?
【问题讨论】:
在 Android 中,当您弹出一个对话框时,它后面的屏幕会变暗。有什么办法可以控制它的外观吗?例如使其变暗或使用某种模式?
【问题讨论】:
是的,是的。你可以控制它。
创建对话框后:
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);
更新2:Blurring is deprecated since API14:
此常量已在 API 级别 14 中弃用。
不再支持模糊。
【讨论】:
或者你可以这样做:
dialog.getWindow().setDimAmount(0.5f);
【讨论】:
这个解决方案对我不起作用。还有另一个选项,您可以取消控制调光的标志。这段代码对我有用:
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
【讨论】:
回答很晚,但我相信随着时间的推移,事情会被弃用,所以我的回答肯定会对某人有所帮助。 首先创建一个对话框:
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();
【讨论】:
以下参数适用于 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;
参数可以分配给对话框。
dialog.getWindow().addContentView(view, params)
【讨论】: