49

我想删除自定义对话框上的黑色背景,如图所示。我确定黑色背景来自对话框,而不是来自应用程序的背景。

带有黑色背景的自定义对话框;

警报对话框代码

public class MyAlertDialog extends AlertDialog { 
    public MyAlertDialog(Context context) 
    {  
        super(context); 
    }  

    public MyAlertDialog(Context context, int theme) 
    { super(context, theme); }
}

活动代码

public void showMyDialogOK(Context context, String s, DialogInterface.OnClickListener OkListener) {        
    MyAlertDialog myDialog = new MyAlertDialog(context, R.style.MyDialog2);        
    myDialog.setTitle(null); 
    myDialog.setMessage(s);        
    myDialog.setButton(DialogInterface.BUTTON_POSITIVE ,"Ok", OkListener);
    myDialog.show();    
}

风格

<?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="MyTheme" parent="@android:style/Theme.NoTitleBar.Fullscreen">
            <item name="android:alertDialogStyle">@style/AlertDialog</item>  
        </style>    

        <style name="MyTheme2" parent="@android:style/Theme.Black">
            <item name="android:alertDialogStyle">@style/AlertDialog</item>    
        </style> 

        <style name="AlertDialog">        
            <item name="android:fullDark">@null</item>
            <item name="android:fullBright">@null</item>
            <item name="android:topDark">@drawable/popup_top_dark</item>
            <item name="android:topBright">@null</item>
            <item name="android:centerBright">@null</item>
            <item name="android:centerDark">@drawable/popup_center_dark</item>
            <item name="android:centerMedium">@null</item>
            <item name="android:bottomDark">@null</item>
            <item name="android:bottomBright">@null</item>
            <item name="android:bottomMedium">@drawable/popup_bottom_medium</item>
        </style>

        <style name="MyDialog2" parent="@android:Theme.Dialog">        
            <item name="android:windowBackground">@null</item>    
            <item name="android:buttonStyle">@style/CustomButton</item>  
        </style>    

        <style name="CustomButton" parent="@android:style/Widget.Button">        
            <item name="android:background">@drawable/button_stateful</item>  
        </style>
</resources>

图片资源

popup_center_dark.9.png

popup_center_dark.9.png

popup_bottom_medium.9.png

popup_bottom_medium.9.png

popup_top_dark.9.png

popup_top_dark.9.png

4

13 回答 13

100
public MyAlertDialog(
        Context context, 
        int theme
    ) extends AlertDialog { 

    super(context, theme);
    getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
}
于 2011-11-14T08:47:30.053 回答
26

SonehowgetWindow().setBackgroundDrawable()对我不起作用AlertDialog。我使用Dialog找到了一个更简单的解决方案。这是我的代码 -

        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.popup_window);
        dialog.show();
于 2014-07-07T12:17:08.120 回答
23

试试这个:

myDialog.getWindow().clearFlags(LayoutParams.FLAG_DIM_BEHIND);
于 2015-11-18T06:07:36.817 回答
7

在为这个问题尝试了几十种其他解决方案之后,最终对我有用的是:

<style name="translucentDialog" parent="android:Theme.Holo.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

然后设置我的对话框使用这个主题。

于 2014-09-23T06:01:25.767 回答
5

去掉背景不透明度颜色,只需要设置 DimAmount

dialog.getWindow().setDimAmount(float amount);

新的暗淡量,从 0 表示没有暗淡到 1 表示完全暗淡。

于 2019-12-31T07:14:43.700 回答
3

使用以下两行代码。也经过测试。

getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

于 2019-11-08T15:04:25.340 回答
1

您可以创建如下的 xml 布局并在 dialog(dialog.xml) 上设置该布局

<?xml version="1.0" encoding="utf-8"?>
<ScrollView android:id="@+id/ScrollView01"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android" style="@style/white_background_bl_aatharv">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:scrollbars="vertical"
        android:scrollbarAlwaysDrawVerticalTrack="true" android:id="@+id/instructions_view">

        <TextView android:id="@+id/TextView01" android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:textColor="#FFFFFF"
            android:text="text here " />
    </LinearLayout>
</ScrollView>

这是在警报对话框上设置布局的代码:

AlertDialog alert = cndtnsbuilder.create();
alert.setView(LayoutInflater.from(
currentactivity.this).inflate(
R.layout.dialog, null));
alert.show();
于 2011-11-14T06:16:36.420 回答
1

以下方法对我有用:

getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
于 2013-05-29T11:48:46.630 回答
1

//style.xml 中的代码样式:

<style name="translucentDialog" parent="android:Theme.Holo.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

// 在活动中:将样式设置为对话框:

   Dialog dialogconf = new Dialog(TreeAct.this, R.style.translucentDialog);
            dialogconf.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
                   dialogconf.setContentView(R.layout.dialog_layout);
于 2016-02-04T15:14:27.733 回答
1

只需更改 Dialog 父级。

有黑色背景

<style name="MyDialog2" parent="@android:Theme.Dialog">        

没有黑色背景

<style name="MyDialog2" parent="@android:style/Theme.DeviceDefault.Light.Dialog">
于 2016-04-12T01:38:56.593 回答
0

要删除背景颜色,在布局上,您只需将背景设置为@null

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@null">
于 2015-07-20T15:11:22.180 回答
0
 dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
于 2016-04-08T07:15:38.527 回答
0

我基于Alertdialog.Builder的自定义对话框遇到了同样的问题,当我使用时,它在标题和正文中显示黑色背景

builder.setView(rootView)
  .setTitle(dialog_title)
  .setMessage(dialog_mesg)

解决方案是 1- 使用预定义警报对话框构建器的主题之一:

  • THEME_DEVICE_DEFAULT_DARK
  • THEME_DEVICE_DEFAULT_LIGHT
  • THEME_HOLO_DARK
  • THEME_HOLO_LIGHT THEME_TRADITIONAL

THEME_DEVICE_DEFAULT_LIGHT 最适合我

2 - 将默认对话框按钮(正/负)颜色设置为您想要的颜色,如下所示:

 Button b = mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
 Button d = mAlertDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
 b.setTextColor(ContextCompat.getColor(getActivity(), R.color.primary));
 d.setTextColor(ContextCompat.getColor(getActivity(), R.color.primary));

查看以下博客文章以获取更多主题选项的详细信息和技巧:http: //blog.supenta.com/2014/07/02/how-to-style-alertdialogs-like-a-pro/

在奥利奥 8.1 上测试

于 2018-11-02T11:19:37.847 回答