带有圆角的Android对话框-仍显示没有圆角半径的背景

时间:2018-08-16 09:25:26

标签: java android xml

我想制作圆角对话框;但是当我完成后,它看起来像这样>>

Result Design

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

测试解决方案后的结果

Result Design

现在完全不显示对话框! 有人可以给我解决这个问题的方法吗?预先谢谢您。

3 个答案:

答案 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()

希望有帮助!