Android带圆角的AlertDialog:矩形框在角落下方可见。

6
我想要一个带有圆角的对话框,但是当对话框显示时,下方会有一个矩形框露出在圆角下面,就像这样:

enter image description here

我使用自定义的 DialogFragment 构建了对话框:

public class MyDialogFragment extends DialogFragment{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();

    builder.setView(inflater.inflate(R.layout.playdialog, null));
    return builder.create();
}
}

对话框布局(playdialog)的背景采用以下可绘制对象:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >

    <solid
        android:color="#AAAAAAAA" />

    <stroke
        android:width="2dp"
        android:color="#FF000000" />

    <corners android:radius="20dp" />
</shape>

正如我所说,我将此可绘制对象设置为背景:

android:background="@drawable/dialog_background"

我不希望那个矩形被看到。我该怎么做?
this帖子中,用户遇到了同样的问题。我尝试使用他解决问题的方法,但对我没有用。我像这样修改了我的DialogFragment
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();

    builder.setView(inflater.inflate(R.layout.playdialog, null));
    Dialog d = builder.create();
    d.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

    return d;
}

结果完全相同。我该如何去除那个矩形?谢谢!
5个回答

7
当我遇到同样的问题时,我很震惊,解决方法也有点奇怪。例如,创建自己的自定义可绘制对象,如下所示。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="@color/text_highlight" />

    <stroke
        android:width="5dp"
        android:color="@color/text_highlight" />

    <corners android:radius="12dp" />

    <stroke
        android:width="1dp"
        android:color="@android:color/transparent" />

</shape>

将以下行添加到您的对话框中:

 dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

 // This is line that does all the magic
 dialog.getWindow().setBackgroundDrawableResource(                             
 R.drawable.dialog_rounded);

4

尝试将DialogFragment的样式设置为Theme_Translucent.

setStyle(STYLE_NO_FRAME, android.R.style.Theme_Translucent);

对我来说这很有效。


1
我在代码中将对话框的背景设置为透明。 请尝试以下代码:
@Override
public void onStart() {
    // TODO Auto-generated method stub
    super.onStart();
    getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(0x00ffffff));
}

1
将以下内容添加到MyDialogFragment的onCreateView()方法中:
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

0

试试这个:

customDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接