我想制作圆角对话框;但是当我完成后,它看起来像这样>>
Java
AlertDialog.Builder dialogBuilder= new AlertDialog.Builder(this);
dialogBuilder.setView(R.layout.complain_dialog);
final AlertDialog alertDialog= dialogBuilder.create();
alertDialog.show();
XML
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="100dp"
app:cardBackgroundColor="#FFF"
app:cardCornerRadius="15dp">
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginBottom="15dp"
android:background="@color/black_overlay" />
</android.support.v7.widget.CardView>
问题是:为什么对话框仍显示在没有拐角半径的背景中?
在寻找解决此问题的方法之后,我找到了一些解决方法>>
1- Android Dialog - Rounded Corners and Transparency
2- Android custom alert dialog with rounded corners
3- Android dialog background with corner radius has layered background
Java-经过测试上述解决方案
Dialog dialog= new Dialog(getContext());
dialog.setContentView(R.layout.complain_dialog);
dialog.getWindow().setBackgroundDrawable(new
ColorDrawable(Color.TRANSPARENT));
dialog.show();
测试解决方案后的结果
现在完全不显示对话框! 有人可以给我解决这个问题的方法吗?预先谢谢您。
答案 0 :(得分:2)
使用AlertDialog
具有相同布局的解决方案(在Kitkat
上进行了测试)。
AlertDialog.Builder dialogBuilder= new AlertDialog.Builder(this);
dialogBuilder.setView(R.layout.temp);
final AlertDialog alertDialog= dialogBuilder.create();
alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
alertDialog.show();
要显示Dialog
相同,您需要设置对话框的宽度。 Here is a reference。否则将采用Content width。将内容视图设置为dialog.getWindow()
之前,请执行所有Dialog
操作。
答案 1 :(得分:0)
在您的Java代码文件中添加以下行
customDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
customDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
还请像下面这样更新您的布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="100dp"
app:cardBackgroundColor="#FFF"
app:cardCornerRadius="15dp"
app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="true">
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginBottom="15dp"
android:background="@color/black_overlay" />
</android.support.v7.widget.CardView>
答案 2 :(得分:0)
在您尝试的代码中,
Dialog dialog= new Dialog(getContext());
dialog.setContentView(R.layout.complain_dialog);
dialog.getWindow().setBackgroundDrawable(new
ColorDrawable(Color.TRANSPARENT));
dialog.show();
使用方法setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
,您基本上是在使该视图透明。
您必须使用可绘制对象的形状和颜色创建一个xml文件,类似于this post中的内容。
然后将其添加到布局中的根元素中,因此,如果将刚创建的xml drawable(可绘制文件夹)文件称为background.xml
,则代码将如下所示:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@drawable/background"
>
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginBottom="15dp"
android:background="@color/black_overlay" />
</android.support.v7.widget.CardView>
然后正常地创建对话框,而无需像以前那样从Java中设置样式:
AlertDialog.Builder dialogBuilder= new AlertDialog.Builder(this);
dialogBuilder.setView(R.layout.complain_dialog);
final AlertDialog alertDialog= dialogBuilder.create();
alertDialog.show()
希望有帮助!