我想删除自定义对话框上的黑色背景,如图所示。我确定黑色背景来自对话框,而不是应用程序的背景。
;
AlertDialog代码
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_bottom_medium.9.png
popup_top_dark.9.png
答案 0 :(得分:84)
public MyAlertDialog(
Context context,
int theme
) extends AlertDialog {
super(context, theme);
getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
}
答案 1 :(得分:17)
Sonehow getWindow().setBackgroundDrawable()
并没有为我AlertDialog
工作。我使用对话框找到了一个更简单的解决方案。这是我的代码 -
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();
答案 2 :(得分:14)
试试这个:
myDialog.getWindow().clearFlags(LayoutParams.FLAG_DIM_BEHIND);
答案 3 :(得分:7)
在为这个问题尝试了几十种其他解决方案后,最终为我工作的是:
<style name="translucentDialog" parent="android:Theme.Holo.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
</style>
然后设置我的对话框以使用此主题。
答案 4 :(得分:1)
您可以创建如下的xml布局,并在对话框(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();
答案 5 :(得分:1)
以下方法对我有用:
getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
答案 6 :(得分: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);
答案 7 :(得分:1)
只需将Dialog改为父母。
黑色背景
<style name="MyDialog2" parent="@android:Theme.Dialog">
没有黑色背景
<style name="MyDialog2" parent="@android:style/Theme.DeviceDefault.Light.Dialog">
答案 8 :(得分: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">
答案 9 :(得分:0)
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
答案 10 :(得分:0)
我在基于 Alertdialog.Builder 的自定义对话框中遇到了相同的问题,当我使用该对话框时,标题和正文中显示了黑色背景:< / p>
builder.setView(rootView)
.setTitle(dialog_title)
.setMessage(dialog_mesg)
解决方案原为 1-使用预定义警报对话框构建器的主题之一:
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/
在Oreo 8.1上进行了测试
答案 11 :(得分:0)
在以下两个代码行中使用。 经过测试。
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
答案 12 :(得分:0)
去除背景不透明色,只需设置DimAmount
dialog.getWindow().setDimAmount(float amount);
新的调光量,从0(无调光)到1(全调)。