Android中透明背景的对话框

Android中透明背景的对话框,android,android-dialog,Android,Android Dialog,如何在Android中删除对话框中的黑色背景。图片显示了问题所在 final Dialog dialog = new Dialog(Screen1.this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.themechanger); 添加此代码 dialog.getWindow().setBackgroundDrawable(new ColorDrawable(

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

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

添加此代码

 dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
或者换成这个:

dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
您可以使用:

setBackgroundDrawable(null);
方法。以下是文档:

  /**
    * 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
    */

与zGnep相同的解决方案,但使用xml:

android:background="@null"

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

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

    <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>
在主清单文件中,对话框活动块内

在对话框活动XML集中添加

 android:background= "#00000000"

不知怎的,撒迦利亚的解决方案对我不起作用,所以我用下面的主题来解决这个问题

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

在代码中尝试以下操作:

getWindow().setBackgroundDrawableResource(android.R.color.transparent);
它肯定会起作用的…就我而言。。。!我的朋友

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

我希望能帮助你

对话框弹出窗口填充默认的黑色背景色或主题色,所以您需要将
透明
背景设置到对话框中。请尝试以下代码:-

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

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

dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.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="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>
而且 在自定义对话框的Xml中:

android:alpha="0.8"

使用此代码它与我一起工作:

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

我在所有现有答案中发现的一个问题是,利润率没有得到保留。这是因为它们都用纯色覆盖负责边距的
android:windowBackground
属性。然而,我在Android SDK中做了一些挖掘,发现默认的窗口背景是可绘制的,并对其进行了一些修改,以允许透明对话框

首先,将/platforms/android-22/data/res/drawable/dialog\u background\u 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>
之后,转到主题并添加以下内容:

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

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

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

创建了自定义样式:

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

如果扩展了
对话框frament
类,可以使用以下选项设置主题:

setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);
然后在styles.xml文件中创建自定义主题(有关参数,请参见@LongLv的答案)


如果希望在用户触摸对话框外部时关闭对话框,请不要忘记添加
true

注意:不要使用builder更改背景

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);
dialog.show();

使用Dialog.builder时,它没有在其中提供
getWindow()
选项。

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


在样式中设置这些样式代码

<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:彩色/透明
@空的
真的
真的
假的
并简单地在下面的行中将false改为true

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

它会使您的背景变暗。

如果您想破坏对话框的暗背景,请使用此选项

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

dialog.getWindow().setBackgroundDrawable(新的ColorDrawable(ContextCompat.getColor(ctx,android.R.color.transparent))

确保
R.layout。由于默认情况下对话框有默认背景色,因此Mechance
没有背景色

您还需要添加
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>

真的
真的
@android:彩色/透明
@空的
@空的

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()
            }
对话框(活动!!,R.style.LoadingIndicator或AlogStyle)
.申请{
//requestWindowFeature(窗口。功能\u无\u标题)
可设置可取消(真)
setContentView(R.layout.define_your_custom_view_id_here)
//访问自定义视图按钮/editText,如下所示.z
val createBt=findviewbyd(R.id.clipboard\u create\u项目)
val cancelBt=findviewbyd(R.id.clipboard\u cancel\u项目)
val clipboard\u et=findviewbyd(R.id.clipboard\u et)
val手动选项=
findViewById(R.id.剪贴板\手动\添加\项目\选项)
//如果要对按钮执行任何操作,请执行以下操作
createBt.setOnClickListener{
//处理你的按钮点击这里
val enteredData=剪贴板_et.text.toString()
if(enteredData.isEmpty()){
Utils.toast(“输入项目详细信息”)
}否则{
navigateToAddProject(输入数据,真)
解雇
}
}
cancelBt.setOnClickListener{
解雇
}
manualOption.setOnClickListener{
navigateToAddProject(“,false)
解雇
}
show()
}
在style.xml中创建LoadingIndicatorDialogStyle,如下所示:

dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.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="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>

真的
@android:彩色/透明
@空的
真的
@彩色/黑色透明剂
居中
@android:彩色/透明

请显示对话框创建的代码此情况也适用于此处的两行代码:在此处找到最佳答案这将起作用,但仅当您扩展对话框时,这不是一个快速的解决方案,而是一个好的解决方案……或者如果您只想设置对话框的样式,请使用此选项:谢谢!但是,我更喜欢使用
dialog.getWindow().setBackgroundDrawable(新的ColorDrawableResource(R.color.transparent))此解决方案有帮助。问题是,宽度将适合屏幕。与普通对话框相比,将没有填充。但是安卓4.1默认处理它,如果我使用的是ALert Dialog呢?如果你在DialogFragment中,只需调用getDialog().getWindow()。。。(创建视图后,例如在onViewCreated回调中)。我更喜欢使用
dialog.getWindow().setBackgroundDrawableResource(R.color.transparent)我认为,当你添加一些expl时,它对OP和其他访问者更有帮助
<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>
 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 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>