在Android中使用透明背景的对话框

时间:2012-05-29 07:50:25

标签: android android-dialog

如何从Android中的对话框中删除黑色背景。图片显示了问题。

enter image description here

final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger); 

21 个答案:

答案 0 :(得分:610)

添加此代码

 dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

修改

dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

答案 1 :(得分:75)

<style name="NewDialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:background">@android:color/transparent</item>
</style>

在java中使用

Dialog dialog = new Dialog(this, R.style.NewDialog);

我希望能帮到你!

答案 2 :(得分:27)

我遇到了一个更简单的问题,我想出的解决方案是应用透明的bachground主题。在你的风格中写下这些行

    <item name="android:windowBackground">@drawable/blue_searchbuttonpopupbackground</item>
</style>
<style name="Theme.Transparent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

然后添加

android:theme="@style/Theme.Transparent"

在主清单文件中,在对话框活动的块内。

在对话框活动XML集中加上

 android:background= "#00000000"

答案 3 :(得分:14)

不知何故Zacharias解决方案对我不起作用所以我使用以下主题解决了这个问题......

<style name="DialogCustomTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
</style>

可以将此主题设置为对话框,如下所示

final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme); 

享受!!

答案 4 :(得分:11)

您可以使用:

setBackgroundDrawable(null);

方法。以下是doc:

  /**
    * Set the background to a given Drawable, or remove the background. If the
    * background has padding, this View's padding is set to the background's
    * padding. However, when a background is removed, this View's padding isn't
    * touched. If setting the padding is desired, please use
    * {@link #setPadding(int, int, int, int)}.
    *
    * @param d The Drawable to use as the background, or null to remove the
    *        background
    */

答案 5 :(得分:11)

对话框弹出填充默认的黑色背景颜色或主题颜色,因此您需要将TRANSPARENT背景设置为对话框。请尝试以下代码: -

final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setContentView(R.layout.splash);
dialog.show();

答案 6 :(得分:7)

我发现所有现有答案的一个问题是保证金不会被保留。这是因为它们都覆盖了android:windowBackground属性,该属性负责边距,具有纯色。但是,我在Android SDK中进行了一些挖掘,发现默认窗口背景是可绘制的,并对其进行了一些修改以允许透明对话框。

首先,将/platforms/android-22/data/res/drawable/dialog_background_material.xml复制到您的项目中。或者,只需将这些行复制到一个新文件中:

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:inset="16dp">
    <shape android:shape="rectangle">
        <corners android:radius="2dp" />
        <solid android:color="?attr/colorBackground" />
    </shape>
</inset>

请注意,android:color设置为?attr/colorBackground。这是您看到的默认灰色/白色。要让自定义样式中android:background中定义的颜色透明并显示透明度,我们所要做的就是将?attr/colorBackground更改为@android:color/transparent。现在看起来像这样:

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:inset="16dp">
    <shape android:shape="rectangle">
        <corners android:radius="2dp" />
        <solid android:color="@android:color/transparent" />
    </shape>
</inset>

之后,转到您的主题并添加:

<style name="MyTransparentDialog" parent="@android:style/Theme.Material.Dialog">
    <item name="android:windowBackground">@drawable/newly_created_background_name</item>
    <item name="android:background">@color/some_transparent_color</item>
</style>

确保将newly_created_background_name替换为您刚刚创建的可绘制文件的实际名称,并将some_transparent_color替换为所需的透明背景。

之后,我们需要做的就是设置主题。在创建AlertDialog.Builder

时使用此选项
    AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);

然后像往常一样构建,创建和显示对话框!

答案 7 :(得分:3)

与zGnep相同,但使用xml:

android:background="@null"

答案 8 :(得分:3)

在您的代码中尝试此操作:

getWindow().setBackgroundDrawableResource(android.R.color.transparent);

它肯定会起作用......在我的情况下......!我的朋友

答案 9 :(得分:3)

这就是我用AlertDialog实现半透明的方法。

创建自定义样式:

<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
    <item name="android:colorBackground">#32FFFFFF</item>
</style>

然后使用以下命令创建对话框:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();

答案 10 :(得分:1)

使用此代码可以与我合作:

    Dialog dialog = new Dialog(getActivity(),android.R.style.Theme_Translucent_NoTitleBar);
    dialog.show();

答案 11 :(得分:1)

以样式设置这些样式代码

<style name="Theme.Transparent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>

只需在行下将false更改为true

<item name="android:backgroundDimEnabled">true</item>

它将使您的背景变暗。

答案 12 :(得分:1)

注意:

请勿使用构建器更改背景

 Dialog dialog = new Dialog.Builder(MainActivity.this)
                            .setView(view)
                            .create();
 dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

更改为

Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
mDialog.show();

使用Dialog.builder时-它没有提供getwindow()选项。

答案 13 :(得分:0)

如果您扩展了DialogFrament类,可以使用以下命令设置主题:

setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);

然后在styles.xml文件中创建自定义主题(参见@LongLv&#39的参数答案)

如果您希望在用户触摸对话框之外关闭对话框,请不要忘记添加<item name="android:windowCloseOnTouchOutside">true</item>

答案 14 :(得分:0)

在我的案例中,解决方案的工作原理如下:

dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

另外 在Xml的自定义对话框中:

android:alpha="0.8"

答案 15 :(得分:0)

对于使用带有自定义类的自定义对话框的任何人,您都需要更改类的透明度,请在onCreate()中添加以下行:

getWindow().setBackgroundDrawableResource(android.R.color.transparent);

答案 16 :(得分:0)

Window window = d.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

这是我的方式,你可以尝试!

答案 17 :(得分:0)

如果您想破坏对话框的深色背景,请使用

dialog.getWindow().setDimAmount(0);

答案 18 :(得分:0)

dialog.getWindow()。setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(ctx,android.R.color.transparent)));

答案 19 :(得分:0)

确保R.layout.themechanger没有背景色,因为默认情况下对话框具有默认背景色。

您还需要添加dialog.getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));

最后

<style name="TransparentDialog">
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowTitleStyle">@null</item>
</style>

答案 20 :(得分:0)

Kotlin创建透明背景对话框的方法:

 Dialog(activity!!, R.style.LoadingIndicatorDialogStyle)
            .apply {
                // requestWindowFeature(Window.FEATURE_NO_TITLE)
                setCancelable(true)
                setContentView(R.layout.define_your_custom_view_id_here)

                //access your custom view buttons/editText like below.z
                val createBt = findViewById<TextView>(R.id.clipboard_create_project)
                val cancelBt = findViewById<TextView>(R.id.clipboard_cancel_project)
                val clipboard_et = findViewById<TextView>(R.id.clipboard_et)
                val manualOption =
                    findViewById<TextView>(R.id.clipboard_manual_add_project_option)

                //if you want to perform any operation on the button do like this

                createBt.setOnClickListener {
                    //handle your button click here
                    val enteredData = clipboard_et.text.toString()
                    if (enteredData.isEmpty()) {
                        Utils.toast("Enter project details")
                    } else {
                        navigateToAddProject(enteredData, true)
                        dismiss()
                    }
                }

                cancelBt.setOnClickListener {
                    dismiss()
                }
                manualOption.setOnClickListener {
                    navigateToAddProject("", false)
                    dismiss()
                }
                show()
            }

像这样在style.xml中创建LoadingIndicatorDialogStyle:

<style name="LoadingIndicatorDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:statusBarColor">@color/black_transperant</item>
    <item name="android:layout_gravity">center</item>
    <item name="android:background">@android:color/transparent</item>
    <!--<item name="android:windowAnimationStyle">@style/MaterialDialogSheetAnimation</item>-->
</style>