【问题标题】:Custom screen dim with Dialog使用 Dialog 自定义屏幕变暗
【发布时间】:2011-09-09 14:00:01
【问题描述】:

在 Android 中,当您弹出一个对话框时,它后面的屏幕会变暗。有什么办法可以控制它的外观吗?例如使其变暗或使用某种模式?

【问题讨论】:

    标签: android dialog


    【解决方案1】:

    是的,是的。你可以控制它。

    创建对话框后:

    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);
    

    更新2Blurring is deprecated since API14

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

    【讨论】:

    • 太棒了!我明天试试!
    • 不推荐使用模糊
    • @Mars 真的。谢谢,添加到回答中
    • 它对我的活动没有任何影响,我不明白为什么
    【解决方案2】:

    或者你可以这样做:

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

    【讨论】:

    • 此调用至少需要 API 级别 14
    • 昏暗的颜色怎么样?
    【解决方案3】:

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

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

    【讨论】:

    • 在设置dimAmount之前要设置对话框的contentView,否则没有效果
    • @jjyao 谢谢...你救了我。
    【解决方案4】:

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

    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();
    

    【讨论】:

      【解决方案5】:

      以下参数适用于 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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-21
        • 1970-01-01
        • 2013-06-28
        相关资源
        最近更新 更多