我试图用自定义视图(没有标题或页脚)和圆角构建一个AlertDialog.我看过很多关于如何做到这一点的帖子,我尝试了很多东西,但是我不能像我想要的那样构建它.
这是我的目标:
我为一个名为dialog_background.xml的对话框创建了一个drawable
<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 name="MyDialog" parent="@android:style/Theme.Dialog"> <item name="android:background">@drawable/dialog_background</item> </style>
我的自定义视图的布局将会有两个按钮.现在我给你看一个空的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>
要构建对话框,我使用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(); }
好的,如果我使用这样的代码,我得到这个:
我尝试将对话框背景设置为透明修改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_background.xml,所以我不能将其设置为透明,或者我放弃了角落,颜色等.
然后我决定使用dialog_background.xml修改对话框的背景,并将我的视图具有纯色作为背景.
在我的自定义视图布局(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; }
这是我得到的:
这几乎是我想要的,但你可以看到我的自定义视图边框,所以这还不够好.在这一点上,我不知道还能做什么.
有人知道我该如何解决?
谢谢!
解决方法
我刚创建了一个自定义警报对话框.但它的角落不是圆的.
首先创建一个布局为 –
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="240sp" android:layout_height="wrap_content" android:background="#FFFFFF" tools:ignore="SelectableText" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="1sp" tools:ignore="UselessParent" > <TableLayout android:id="@+id/tablelayout_dialog_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:stretchColumns="1" > <TableRow android:id="@+id/tablerow_dialog_title" android:layout_width="fill_parent" android:layout_height="wrap_content" tools:ignore="UselessParent" > <ImageView android:id="@+id/imageview_dialog_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/alertwhite" android:layout_gravity="center" android:background="#643c3a" android:contentDescription="@string/string_todo"/> <TextView android:id="@+id/textview_dialog_title" android:layout_width="wrap_content" android:layout_height="fill_parent" android:background="#643c3a" android:padding="10sp" android:gravity="center_vertical" android:textColor="#FFFFFF" android:textSize="15sp" /> </TableRow> </TableLayout> <View android:id="@+id/viewline_dialog" android:layout_below="@+id/tablelayout_dialog_title" android:layout_width = "wrap_content" android:layout_height="0.25dip" android:background="#ffffff" android:layout_centerVertical ="true" /> <TextView android:id="@+id/textview_dialog_text" android:layout_below="@+id/viewline_dialog" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="8sp" android:background="#643c3a" android:textColor="#FFFFFF" android:textSize="12sp" /> <View android:id="@+id/viewline1_dialog" android:layout_width = "wrap_content" android:layout_height="0.5dip" android:background="#ffffff" android:layout_centerVertical ="true" android:layout_below="@+id/textview_dialog_text"/> <TableLayout android:id="@+id/tablelayout_dialog_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:stretchColumns="*" android:layout_below="@+id/viewline1_dialog" android:background="#a8a8a8" > <TableRow android:id="@+id/tablerow_dialog_button" android:layout_width="fill_parent" android:layout_height="wrap_content" tools:ignore="UselessParent" > <Button android:id="@+id/button_dialog_yes" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="8sp" android:paddingTop="5sp" android:paddingBottom="5sp" android:background="@drawable/roundedcornerbuttonfordialog_shape" android:text="@string/string_yes" /> <Button android:id="@+id/button_dialog_no" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="8sp" android:paddingTop="5sp" android:paddingBottom="5sp" android:background="@drawable/roundedcornerbuttonfordialog_shape" android:text="@string/string_no" /> </TableRow> </TableLayout> </RelativeLayout>
现在把对话框的代码写成 –
public static void callAlert(String message,final Context context){ final Dialog dialog = new Dialog(context); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.customdialog_layout); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.WHITE)); TextView tvTitle = (TextView) dialog.findViewById(R.id.textview_dialog_title); tvTitle.setText("MyApp.."); TextView tvText = (TextView) dialog.findViewById(R.id.textview_dialog_text); tvText.setText(message); Button buttonDialogYes = (Button) dialog.findViewById(R.id.button_dialog_yes); buttonDialogYes.setOnClickListener(new OnClickListener() { public void onClick(View v) { // Do your stuff... dialog.dismiss(); } }); Button buttonDialogNo = (Button) dialog.findViewById(R.id.button_dialog_no); buttonDialogNo.setOnClickListener(new OnClickListener() { public void onClick(View v) { // Do your stuff... dialog.dismiss(); } }); dialog.show(); }
并称此方法为 –
String message = "Your Message"; callAlert(message,callingClass.this);
希望这将有助于您.