当前位置: 首页 > 知识库问答 >
问题:

特定位置背景模糊的对话框

笪俊迈
2023-03-14

我试图在AlertDialog后面有一个模糊的背景。该过程如下所示:拍摄活动的屏幕截图并将其模糊,然后将其保存到位图中。然后将此位图转换为可绘制位图。然后,我使用这行代码renameDialog设置警报窗口的可绘制背景。getWindow()。可缩位拉深(拉深) 问题在于,即使我通过指定布局参数强制某个位置,对话框也只显示在屏幕顶部。我注意到,如果我将setBackgroundDrawable更改为setBackgroundDrawable资源,并为其提供一个现有的drawable,那么对话框将显示在指定的位置。

需要做什么才能将setBackgroundDrawable用于对话框的指定位置?

谢谢

        AlertDialog renameDialog = new AlertDialog.Builder(this).create();

        LayoutInflater factory = LayoutInflater.from(this);
        deleteDialogView = factory.inflate(R.layout.dialog_rename_playlist, null);

        //Getting Blurry screenshot to display it behind dialog
        Bitmap backgroundScreenshot = Utils.takeScreenShot(PlaylistActivity.this);
        Bitmap blurryBackground = Utils.getBlurredBitmap(backgroundScreenshot, 30);

        WindowManager.LayoutParams wmlp = renameDialog.getWindow().getAttributes();
        wmlp.gravity = Gravity.CENTER_VERTICAL;
        wmlp.x= 100;
        wmlp.y= 100;


        final Drawable draw=new BitmapDrawable(getResources(), blurryBackground);
        renameDialog.getWindow().setBackgroundDrawable(draw);

        renameDialog.getWindow().setAttributes(wmlp);
        renameDialog.setView(deleteDialogView, 0, 0, 0, 0);
        renameDialog.show();

共有3个答案

严宏旷
2023-03-14

我想你可以用PopupWindow

东方华晖
2023-03-14

一堆猜测

wmlp.gravity = Gravity.CENTER_VERTICAL; //put me in the middle vertically
wmlp.x= 100; //sorry i have no effect
wmlp.y= 100;//dude!! you are wasting lines; i have no effect

做这个

wmlp.gravity = Gravity.FILL; // i grow up when needed
wmlp.x= 100; // now i am useful
wmlp.y= 100; //dude!! you are wasting lines; use wmlp.y = wmlp.x = 100

希望有帮助

燕成双
2023-03-14
匿名用户

通过将窗口的背景设置为屏幕大小的可绘制窗口,您将使窗口扩展到全屏尺寸。在本例中,重力。CENTER_VERTICAL不能做任何事情。计算与<代码>重力。CENTER_VERTICAL的工作原理如下:

spacingAtTop = spacingAtBottom = (containerHeight - contentHeight) / 2

设置背景后,contentHeight等于containerHeight

如果可能,发布R.layout.dialog_rename_playlist

有一件事你可以尝试而不做太多改变:

包装R.layout的内容。对话框(重命名)(播放列表)位于高度设置为匹配(父项)的框架布局内。R.layout的当前父级(称为oldParent)。对话框重命名播放列表的高度应设置为wrap\u contentlayout\u gravity设置为center\u vertical。这至少会将您的内容带到中心。但这并不能解决你的定位问题。

更可靠的方法是使用FrameLayout作为活动/片段的父容器。在显示对话框之前,拍摄一个屏幕截图,将其模糊,并将其设置为此FrameLayout的前景。使您的AlertDialog的背景透明,您将获得相同的效果。

 类似资料:
  • 我希望对话框下有模糊的屏幕,所以我拍摄活动的“截图”,模糊它,并将其设置为可位图绘制的对话框窗口背景。奇怪的是对话框不再集中在屏幕上,即使调用了setCanceledOnTouchOutside(true),触摸外部对话框也不会关闭它。 问题是:为什么这不起作用?分别如何创建背景模糊的对话框?

  • 正如我们从API 14知道的,下面的模糊已经被弃用 有没有其他方法可以使屏幕模糊我已经尝试过快速模糊

  • 对不起我的英语:)。我需要模糊我的对话框活动背景,我尝试了这种方法 模糊警报对话框后面的背景 我用以下代码发送位图: 并在我的活动中接收位图: 但它强迫我关闭logcat中的错误: 我怎样才能解决这个问题?或者你知道另一种模糊对话活动背景的方法吗?

  • 问题 试图模糊(而不是变暗)对话框的背景。 并且不建议使用。 方法是,从当前视图中截图并模糊它。然后,当出现时,将其附加到背景,然后它就会工作。 但是总是在顶部而不是中间。(查看图片) 在附加后无效。(在将其附加到背景之前,警报可以定位到中心位置,但在将模糊视图附加到背景之后,始终转到顶部) 如何在屏幕中设置警报中心? 以下是我尝试过的代码,任何指南都将不胜感激, 当我按back时显示警报。 其他

  • 问题内容: 我希望网站上的弹出窗口具有 Vista/7航空玻璃风格的效果,并且它必须是动态的。我很好这不是一个跨浏览器的效果,只要该网站仍然 _适用_于所有现代浏览器。 我的第一次尝试是使用类似 但是,正如我应该预期的那样, 这导致 对话框的 内容 模糊并且背景保持清晰。 有什么方法可以使用CSS来模糊半透明元素的背景而不是其内容? 问题答案: 由于除FF以外,其他浏览器似乎未广泛支持该属性,因此

  • 除了背景背景平铺外,CSS还提供了另一个强大的功能,即背景定位技术,能够精确控制背景在对象中的位置。 默认情况下,背景图像都是从元素 padding 区域的左上角开始出现的,但设计师往往希望背景能够出现在任何位置。通过 background-position属性,可以很轻松的控制背景图像在对象的背景区域中的起始显示位置。其语法格式为: background-position: xpos ypos