使用叠加层时如何使背景变暗?

时间:2018-07-24 13:43:20

标签: java android overlay

我正在使用系统覆盖图来显示一些内容。但我想让叠加层使背景变暗。我该怎么办?

这就是我想要的方式:

这就是我的方法:

enter image description here

这是我设置覆盖图的代码:

overlay = LayoutInflater.from(this).inflate(R.layout.activity_popup_dictionary, null);

final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.MATCH_PARENT,
        WindowManager.LayoutParams.MATCH_PARENT,
        WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
        PixelFormat.TRANSLUCENT);

params.gravity = Gravity.BOTTOM;        
params.x = 0;
params.y = 100;

windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
windowManager.addView(overlay, params);

2 个答案:

答案 0 :(得分:0)

就我个人而言,我将其设为DialogFragment,并执行此代码onStart;这样,您可以自定义对话框的透明度

dialog.window.apply {
    attributes.apply {
        dimAmount = 0.50f
        flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND
    }

    setBackgroundDrawable(ColorDrawable(0))
    setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
    setGravity(Gravity.CENTER)
}

答案 1 :(得分:0)

奈杰尔·布朗的答案可能正常工作。

1:创建具有深色和低不透明度的形状(获得全屏显示)。
2:创建一个新的布局或框架,将您创建的形状作为背景
3:在这个新的几乎透明的布局的顶部,将您的布局覆盖您想要的任何内容
4:在后台设置一个点击侦听器,例如yourLayout.setVisibilty(View.GONE)来关闭覆盖

希望它能起作用!