我试图用自定义视图(没有标题或页脚)和圆角构建一个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);
希望这将有助于您.