android使用ShowDialog来显示一个Dialog,当第一次调用ShowDialog时,会调用Activity的onCreateDialog方法,我们只需重写该方法,在改方法中创建一个Dialog.
而onPrepareDialog(int, Dialog)在Dialog显示时每次都会被调用。因此如果要动态修改dialog的信息,可以在改方法中实现.
下面给出使用实例:
showDialog(v.getId()); // 调用showDialog之后会回调onCreateDialog
@Override protected Dialog onCreateDialog(int id) { // TODO Auto-generated method stub switch (id) { case R.id.btnTwobtn: return CreateDialog(); case R.id.btnthreebtn: return CreateDialog3(); case R.id.btnInput: return CreateDialogLogin(); case R.id.btnwait: // 启动线程来关闭等待框 new Thread() { @Override public void run() { int i = 0; while (i < 10) { try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } i++; } dismissDialog(R.id.btnwait); } }.start(); return CreateProcessDialog(); case R.id.btnTimePicker: return CreateTimePickerDialog(); default: return CreateDialog(); } } // 第一个按钮 private Dialog CreateDialog() { AlertDialog.Builder builder = new Builder(this); builder.setTitle("dialog test"); builder.setMessage("点击按钮测试一下吧,看看title的变化"); builder.setPositiveButton("ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub setTitle("click ok"); } }); builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub setTitle("click cancel"); } }); return builder.create(); } // 第2个按钮 private Dialog CreateDialog3() { AlertDialog.Builder builder = new Builder(this); builder.setTitle("dialog test"); builder.setMessage("点击按钮测试一下吧,看看3个按钮对title的变化"); builder.setPositiveButton("ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub setTitle("click ok"); } }); builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub setTitle("click cancel"); } }); builder.setNeutralButton("详细", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub setTitle("click detail"); } }); return builder.create(); } // 第3个按钮 弹出输入框 private Dialog CreateDialogLogin() { AlertDialog.Builder builder = new Builder(this); // 加载layout文件 LayoutInflater inflater = LayoutInflater.from(this); View view = inflater.inflate(R.layout.logindialog, null); builder.setView(view); builder.setPositiveButton("ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub setTitle("click ok"); } }); builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub setTitle("click cancel"); } }); builder.setNeutralButton("详细", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub setTitle("click detail"); } }); return builder.create(); } // 第4个按钮 等待框 private Dialog CreateProcessDialog() { ProgressDialog dialog = new ProgressDialog(this); dialog.setMessage("正在运行,请等待..."); return dialog; } // 第5个按钮 时间选择框 private Dialog CreateTimePickerDialog() { TimePickerDialog dialog = new TimePickerDialog(this, 0, mTimeSetListener, 0, 0, false); return dialog; } private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { // TODO Auto-generated method stub int hour = hourOfDay; int minute1 = minute; Toast.makeText(getBaseContext(), "You have selected : " + hour + ":" + minute1, Toast.LENGTH_SHORT).show(); } };
如果我们想把一个Activity显示为一个Dialog形式,可以在androidManifest.xml中的activity的属性设为android:theme="@android:style/Theme.Dialog,伪装为dialog
<activity android:name="DialogActivity" android:theme="@android:style/Theme.Dialog"></activity>