我正在尝试AlertDialog
使用自定义view
(无标题或页脚)和圆角构建一个。我看过很多关于如何做到这一点的帖子,我尝试了很多东西,但我无法按照我想要的方式构建它。
这是我的目标:
drawable
我为被dialog
调用的 dialog_background.xml创建了一个:
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid
android:color="#FFAAAAAA" />
<stroke
android:width="2dp"
android:color="#FF000000" />
<corners android:radius="20dp" />
</shape>
我添加了一个style
来使用它:
<style name="MyDialog" parent="@android:style/Theme.Dialog">
<item name="android:background">@drawable/dialog_background</item>
</style>
我的layout
习惯view
是有两个按钮。现在我向您展示一个空LinearLayout
的以使其简单。这是 playdialog.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
style="@style/MyDialog"
>
</LinearLayout>
要构建Dialog
我使用DialogFragment
. 这是它的onCreateDialog
功能:
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();
}
好的,如果我使用这样的代码,我会得到:
我试图将dialog
背景设置为透明修改我的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));
**NEW**
Dialog d = builder.create();
d.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
return d;
}
结果完全一样,所以我意识到我下面的那个白色矩形dialog
来自我的 custom view
,而不是来自dialog
. 我已经将我view
的背景设置为 dialog_background.xml,所以我也不能将其设置为透明,否则我会丢失角落、颜色等。
然后我决定dialog
使用 dialog_background.xml 修改背景,并让我的视图以纯色作为背景。
在我的自定义view
layout
(playdialog.xml)中,我将 style="@style/MyDialog" 替换为:
android:background="#FFAAAAAA"
然后在我的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));
**NEW**
Dialog d = builder.create();
d.getWindow().setBackgroundDrawableResource(R.drawable.dialog_background);
return d;
}
这就是我得到的:
这几乎是我想要的,但你可以看到我的自定义view
边框,所以还不够好。在这一点上,我不知道我还能做什么。
任何人都知道我该如何解决?
谢谢!