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

对话框后面的模糊背景

荀靖
2023-03-14

我希望对话框下有模糊的屏幕,所以我拍摄活动的“截图”,模糊它,并将其设置为可位图绘制的对话框窗口背景。奇怪的是对话框不再集中在屏幕上,即使调用了setCanceledOnTouchOutside(true),触摸外部对话框也不会关闭它。

问题是:为什么这不起作用?分别如何创建背景模糊的对话框?

public class BlurDialog extends DialogFragment {

public BlurDialog() {
}

public static BlurDialog newInstance() {
    return new BlurDialog();
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    final AlertDialog alertDialog = new AlertDialog.Builder(getActivity())
            .setTitle("Title")
            .setMessage("Message")
            .setPositiveButton("OK", null)
            .setNegativeButton("Cancel", null)
            .create();
    alertDialog.setCanceledOnTouchOutside(true);


    View view = getActivity().getWindow().getDecorView();
    view.setDrawingCacheEnabled(true);
    Bitmap b1 = view.getDrawingCache();

    Rect frame = new Rect();
    getActivity().getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
    int statusBarHeight = frame.top;
    final int width = getActivity().getWindow().getDecorView().getWidth();
    final int height = getActivity().getWindow().getDecorView().getHeight();

    Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height-statusBarHeight);

    //define this only once if blurring multiple times
    RenderScript rs = RenderScript.create(getActivity());

    //this will blur the bitmapOriginal with a radius of 8 and save it in bitmapOriginal
    final Allocation input = Allocation.createFromBitmap(rs, b); //use this constructor for best performance, because it uses USAGE_SHARED mode which reuses memory
    final Allocation output = Allocation.createTyped(rs, input.getType());
    final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
    script.setRadius(8f);
    script.setInput(input);
    script.forEach(output);
    output.copyTo(b);

    alertDialog.getWindow().setBackgroundDrawable(new BitmapDrawable(getResources(), b));


    return alertDialog;
}
}

共有2个答案

薛枫
2023-03-14

选中此项:https://stackoverflow.com/a/21278278/3891036

它对我很有效。

创建一个样式表。xml

<style name="Theme.D1NoTitleDim" parent="android:style/Theme.Translucent">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:backgroundDimEnabled">true</item>
    <item name="android:background">@android:color/transparent</item>        
</style>

然后在你的对话中

dialog = new Dialog(context,styles);
严峰
2023-03-14

这篇文章是旧的,但供您参考:

要创建背景模糊的对话框,可以使用此库:

https://github.com/tvbarthel/BlurDialogFragment

您可以创建一个扩展BlurDialogFragment的类,并在onCreateView方法中扩展自定义布局。请参见下面的示例:

public class CustomDialogFragment extends BlurDialogFragment {


@Override
protected boolean isActionBarBlurred() {
// Enable or disable the blur effect on the action bar.
// Disabled by default.
return true;
}

 @Override
 protected int getBlurRadius() {
// Allow to customize the blur radius factor.
return 7;
}

@Override
protected boolean isDimmingEnable() {
// Enable or disable the dimming effect.
// Disabled by default.
return false;
}


@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
                     Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.dialog_fragment_layout, container, 
false);


return v;
}

要显示活动中的对话框,请执行以下操作:

FragmentManager fragmentManager = getFragmentManager();
CustomDialogFragment cdf = new CustomDialogFragment();
cdf.show(fragmentManager,"yourTag");

`

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

  • 我试图在AlertDialog后面有一个模糊的背景。该过程如下所示:拍摄活动的屏幕截图并将其模糊,然后将其保存到位图中。然后将此位图转换为可绘制位图。然后,我使用这行代码

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

  • 我想将黑色透明背景更改为白色透明,试图在样式中更改它,但它不起作用。 我还想将黑色模糊背景更改为白色模糊,尝试在样式中更改它。 我也尝试了这里提到的渲染脚本、快速模糊、xml,但它只改变了对话框的白色背景 有什么办法可以改变吗?提前谢谢!

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

  • 当打开按钮点击事件的对话框时,我正在为背景图像模糊制作应用程序,它适用于api级别8(姜饼)和api级别14(ICS),而不是背景图像模糊它唯一的变暗背景,如浅黑色,我所做的,提前感谢 这是在Android2.3和4.0上运行的代码不起作用,