我想创建一个自定义对话框,如下所示
我尝试了以下事情。
我创建了 AlertDialog.Builder 的子类,并使用了自定义标题和自定义内容视图并使用了它,但结果与预期不符。
另一种尝试是 继承 DialogFragment 并自定义 onCreateDialog 中的对话框,但结果与预期不符。
然后我尝试使用一个普通的 Dialog 类。结果并不如预期。
在这三种情况下,问题是当我忽略标题视图时,对话框的大小不符合预期,当我使用标题视图时,结果是内容视图周围有一个粗边框(这看起来很糟糕)。现在我脑子里有两个问题…
我怎样才能做到这一点?由于我已经尝试了很多事情,因此将更加感谢直接回答。
在 android 应用程序中显示错误或警报对话框的最佳方式是什么?
编辑 Android开发人员文档建议我们应该使用 DialogFragments 或 Dialogs 向用户显示错误/警报消息。然而,他们有一次说......
提示:如果您想要自定义对话框,则可以将 Activity 显示为对话框,而不是使用对话框 API。只需创建一个活动并将其主题设置为清单元素中的 Theme.Holo.Dialog。
那是什么意思? 仅仅为了显示错误信息而使用 Activity 是不是太过分了???
在这里,我创建了一个简单的对话框,例如:
custom_dialog.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="80dp" android:background="#3E80B4" android:orientation="vertical" > <TextView android:id="@+id/txt_dia" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="10dp" android:text="Do you realy want to exit ?" android:textColor="@android:color/white" android:textSize="15dp" android:textStyle="bold"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="#3E80B4" android:orientation="horizontal" > <Button android:id="@+id/btn_yes" android:layout_width="100dp" android:layout_height="30dp" android:background="@android:color/white" android:clickable="true" android:text="Yes" android:textColor="#5DBCD2" android:textStyle="bold" /> <Button android:id="@+id/btn_no" android:layout_width="100dp" android:layout_height="30dp" android:layout_marginLeft="5dp" android:background="@android:color/white" android:clickable="true" android:text="No" android:textColor="#5DBCD2" android:textStyle="bold" /> </LinearLayout> </LinearLayout>
你必须extends Dialog和implements OnClickListener
extends Dialog
implements OnClickListener
public class CustomDialogClass extends Dialog implements android.view.View.OnClickListener { public Activity c; public Dialog d; public Button yes, no; public CustomDialogClass(Activity a) { super(a); // TODO Auto-generated constructor stub this.c = a; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.custom_dialog); yes = (Button) findViewById(R.id.btn_yes); no = (Button) findViewById(R.id.btn_no); yes.setOnClickListener(this); no.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_yes: c.finish(); break; case R.id.btn_no: dismiss(); break; default: break; } dismiss(); } }
如何调用对话框?
R.id.TXT_Exit: CustomDialogClass cdd=new CustomDialogClass(Values.this); cdd.show();
很长一段时间后,我的一个朋友要求我制作一个带有透明背景的曲线形状对话框。所以,在这里我已经实现了它。
要制作弯曲的形状,您需要创建一个单独的形状curve_shap.XML,如下所示,
curve_shap.XML
<shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#000000" /> <stroke android:width="2dp" android:color="#ffffff" /> <corners android:bottomLeftRadius="20dp" android:bottomRightRadius="20dp" android:topLeftRadius="20dp" android:topRightRadius="20dp" /> </shape>
现在,将其添加curve_shap.XML到您的主视图布局中。就我而言,我使用过LinearLayout
LinearLayout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="80dp" android:background="@drawable/curve_shap" android:orientation="vertical" > ... </LinearLayout>
这个怎么称呼?
CustomDialogClass cdd = new CustomDialogClass(MainActivity.this); cdd.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); cdd.show();
我希望这对你有用。